<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Software Development &#8211; Few Steps &#8211; ก้าวสั้นๆ แต่ไปเรื่อยๆ</title>
	<atom:link href="https://myifew.com/tag/software-development/feed/" rel="self" type="application/rss+xml" />
	<link>https://myifew.com</link>
	<description></description>
	<lastBuildDate>Tue, 07 Jul 2026 16:26:23 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.2</generator>

<image>
	<url>https://myifew.com/wp-content/uploads/2018/07/cropped-logo6-ts-32x32.png</url>
	<title>Software Development &#8211; Few Steps &#8211; ก้าวสั้นๆ แต่ไปเรื่อยๆ</title>
	<link>https://myifew.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>ZeeSpec กับการโค้ดงานแบบ  Greenfield และ Brownfield</title>
		<link>https://myifew.com/7769/zeespec-spec/</link>
					<comments>https://myifew.com/7769/zeespec-spec/#respond</comments>
		
		<dc:creator><![CDATA[iFew]]></dc:creator>
		<pubDate>Mon, 06 Jul 2026 16:06:52 +0000</pubDate>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[AI Coding]]></category>
		<category><![CDATA[Brownfield]]></category>
		<category><![CDATA[Greenfield]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Spec-Driven Development]]></category>
		<category><![CDATA[ZeeSpec]]></category>
		<guid isPermaLink="false">https://myifew.com/?p=7769</guid>

					<description><![CDATA[ZeeSpec คือแนวคิดการเขียน spec แบบ constraint system เพื่อกัน AI เดา requirement เอง โดยวิธีใช้จะแตกต่างกันมากระหว่าง greenfield และ brownfield project]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">โพสต์ก่อน ผมเขียนถึง <a href="https://myifew.com/7753/writing-effective-prompts-by-google/" data-type="post" data-id="7753">คู่มือการเขียน Prompt ที่ดี ให้ได้ผลตรงใจ จากคำแนะนำของ Google</a> ซึ่งเบสิกเลยคือการระบุ Role/Task/Context/Output Format</p>



<p class="wp-block-paragraph">สำหรับโพสต์นี้ เอาใจสาย Spec Driven Development หน่อย คือผมไปเจออีกวิธีที่น่าสนใจดี ที่ใช้ในการทำ Spec ค่อนข้างละเอียดเลย แต่พอนึกดีๆ แล้ว หลายครั้งผมก็เขียนแบบนี้โดยไม่รู้ตัว</p>



<p class="wp-block-paragraph">เพราะความไม่ต้องการให้ AI เดาเอง และไม่อยากอารมณ์เสียเมื่อรอมันรันนานแต่ผลลัพธ์ที่ได้ไม่ตรงใจ ผมจึงมักจะระบุว่าใคร ทำอะไร อย่างไร ที่ไหน เมื่อไร อะไรควรทำ ไม่ควรทำ</p>



<p class="wp-block-paragraph">ซึ่งเครื่องมือในโพสต์นี้เป็นประมาณนั้นเลยครับ เผื่อใครจะเอาไปเป็นไอเดียเสริมสไตล์การเขียน Prompt/Spec ให้กับผู้อ่านได้</p>



<span id="more-7769"></span>



<p class="wp-block-paragraph"><em>หมายเหตุ: บทความนี้ฟิวส์กับเอเจ้นชมพู ได้เรียบเรียงและแปลจากต้นฉบับของ Vishal Mysore เรื่อง <a href="https://medium.com/@visrow/zeespec-spec-driven-development-for-greenfield-vs-brownfield-projects-c593b5d88186" target="_blank" rel="noopener">ZeeSpec- Spec Driven Development for Greenfield vs Brownfield Projects</a></em></p>



<h2 class="wp-block-heading">AI มันไม่กลัว requirement ที่ไม่ชัด แต่มันจะเดาแทนเราเลย</h2>



<p class="wp-block-paragraph">บทความต้นฉบับพูดถึงเครื่องมือชื่อ <strong>ZeeSpec</strong> ซึ่งเป็นแนวคิดการทำ spec แบบบังคับให้เราตอบคำถามให้ครบก่อนเริ่มให้ AI สร้างระบบ</p>



<p class="wp-block-paragraph">คำสำคัญของ ZeeSpec คือ มันไม่ได้เป็น documentation เฉยๆ แต่มันเป็น <strong>constraint system</strong> หรือระบบกรอบข้อจำกัดที่บอก AI ว่าอะไรทำได้ อะไรทำไม่ได้ อะไรห้ามเดา</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">ถ้าเราไม่ตอบ AI จะตอบแทนเรา และคำตอบนั้นอาจดูดีมากจนเราไม่ทันระวัง</p>
</blockquote>



<p class="wp-block-paragraph">ฟังดูเหมือนเรื่องเล็กนะครับ แต่คนทำ software น่าจะเคยเจออาการนี้กันบ่อยมาก เช่น บอกให้เพิ่ม feature นิดเดียว แต่ AI ดัน refactor service เดิมให้ด้วย หรือบอกให้เพิ่ม field ในตาราง แต่มัน generate migration ที่กระทบข้อมูลเดิมแบบชวนเสียวหลัง</p>



<p class="wp-block-paragraph">พออ่านบทความนี้แล้วผมนึกถึงการสร้างบ้านเลย ถ้าเราไม่บอกว่าเสาไหนห้ามแตะ ผนังไหนรับน้ำหนัก ท่อประปาเดินตรงไหน ช่างที่ขยันมากอาจทำบ้านใหม่ให้สวยกว่าเดิม แต่พังโครงเดิมไปด้วย</p>



<h2 class="wp-block-heading">ZeeSpec ใช้ 5W1H มาบีบให้เราคิดครบ</h2>



<p class="wp-block-paragraph">ZeeSpec วางอยู่บนแนวคิด <strong>Zachman Framework</strong> ซึ่งเป็นกรอบคิดด้าน enterprise architecture และโมเดล <strong>5W1H</strong> ที่ประกอบด้วย What, Where, When, Who, Why, How</p>



<p class="wp-block-paragraph">ในบทความบอกว่า ZeeSpec มีคำถาม 60 ข้อ แบ่งเป็น 6 มิติ มิติละ 10 ข้อ เป้าหมายไม่ได้อยู่ที่การเขียนเอกสารให้ยาว แต่อยู่ที่การบังคับให้ decision สำคัญถูกพูดออกมาก่อน AI จะลงมือเขียนโค้ด</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>มิติ</th><th>คำถามหลัก</th><th>ตัวอย่างสิ่งที่ต้องระบุ</th></tr></thead><tbody><tr><td><strong>WHAT</strong></td><td>ระบบคืออะไร</td><td>entity, state, boundary, สิ่งที่ห้ามมี</td></tr><tr><td><strong>WHERE</strong></td><td>ข้อมูลและการทำงานอยู่ที่ไหน</td><td>storage, infrastructure, integration, data flow</td></tr><tr><td><strong>WHEN</strong></td><td>อะไรเกิดขึ้นตอนไหน</td><td>trigger, expiry, schedule, blocking condition</td></tr><tr><td><strong>WHO</strong></td><td>ใครทำอะไรได้</td><td>role, permission, ownership, approval</td></tr><tr><td><strong>WHY</strong></td><td>ทำไม rule นี้มีอยู่</td><td>business intent, validation, policy</td></tr><tr><td><strong>HOW</strong></td><td>ระบบทำงานและพังอย่างไร</td><td>error handling, recovery, consistency, rollback</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">ผมชอบตรงที่มันไม่ได้ถามแค่ว่า “อยากได้ feature อะไร” แต่มันถามด้วยว่า “อะไรห้ามเกิดขึ้น” ซึ่งปกติเราไม่ค่อยเขียนลง requirement กัน ทั้งที่ในโลกจริง สิ่งที่ห้ามเกิดขึ้นนี่สำคัญมาก</p>



<h2 class="wp-block-heading">Greenfield คือพื้นที่ว่างที่อันตรายกว่าที่คิด</h2>



<p class="wp-block-paragraph"><strong>Greenfield project</strong> คือโปรเจกต์ที่เริ่มใหม่แทบทั้งหมด ไม่มี schema เดิม ไม่มี API เดิม ไม่มี legacy ให้ต้องเกรงใจ</p>



<p class="wp-block-paragraph">ข้อดีคือเราออกแบบใหม่ได้เต็มที่ แต่ข้อเสียคือไม่มีอะไรคอยขัด AI เลย ถ้าเรา spec ไม่ครบ มันจะเติมโลกทั้งใบให้เราเอง</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Greenfield ไม่ได้เสี่ยงเพราะไม่มีของเดิม แต่มันเสี่ยงเพราะไม่มีแรงต้านเวลา AI เดา</p>
</blockquote>



<p class="wp-block-paragraph">ในบทความเสนอว่า สำหรับ greenfield ต้องตอบให้ครบทุกมิติ โดยเฉพาะคำถามที่คนมักข้าม เช่น</p>



<ul class="wp-block-list">
<li>ระบบนี้ทำอะไร และไม่ทำอะไร</li>



<li>entity ไหนมีจริง entity ไหนห้ามมี</li>



<li>ข้อมูลอะไรห้ามเก็บเด็ดขาด เช่น PII, payment data, secret</li>



<li>ใครเห็นข้อมูลอะไรได้บ้าง</li>



<li>เมื่อเกิด error ระบบควร fail แบบไหน</li>



<li>ถ้าเจอข้อมูลไม่ครบ ระบบควรหยุดหรือเดา</li>
</ul>



<p class="wp-block-paragraph">ถ้าเขียนแบบนี้ก่อนให้ AI ทำงาน โอกาสที่มันจะสร้าง table ประหลาดๆ หรือ flow ที่ดูสมเหตุสมผลแต่ผิด business rule จะน้อยลงมาก</p>



<h2 class="wp-block-heading">Brownfield ต้องล็อกของเดิมก่อนค่อยสั่งของใหม่</h2>



<p class="wp-block-paragraph"><strong>Brownfield project</strong> คือระบบที่มีอยู่แล้ว อาจมี database จริง มี user ใช้งานจริง มี API consumer ภายนอก มี technical debt ที่ทุกคนรู้ว่าไม่สวย แต่แตะมั่วไม่ได้</p>



<p class="wp-block-paragraph">ตรงนี้บทความให้แนวคิดที่ผมว่าโดนมาก คือ brownfield ไม่ควร spec ทั้งระบบใหม่ แต่ควร spec เฉพาะ <strong>delta</strong> หรือส่วนที่เปลี่ยน</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Greenfield คือเติมทุกมิติ ส่วน brownfield คือ lock สิ่งที่มีอยู่ แล้วระบุเฉพาะสิ่งที่จะเปลี่ยน</p>
</blockquote>



<p class="wp-block-paragraph">นี่เป็นจุดที่หลายทีมพลาด รวมถึงผมเองก็เคยพลาดครับ เวลาใช้ AI กับระบบเดิม เรามักคิดว่าให้ context เยอะๆ แล้วมันจะเข้าใจ แต่ถ้าเราไม่บอกว่า “ห้ามแตะอะไร” มันอาจช่วยเกินหน้าที่</p>



<p class="wp-block-paragraph">ตัวอย่างง่ายๆ เช่น เราขอเพิ่ม endpoint ใหม่สำหรับ export report แต่ถ้าไม่ได้ lock authentication pattern เดิมไว้ AI อาจ generate middleware แบบใหม่ หรือแก้ permission model ให้ดูสะอาดขึ้น ซึ่งดูดีใน diff แต่พังกับระบบจริง</p>



<h2 class="wp-block-heading">ก่อน spec ระบบเก่า ต้องป้อน context ของระบบเก่าก่อน</h2>



<p class="wp-block-paragraph">สำหรับ brownfield บทความแนะนำให้เริ่มด้วย Step 0 คือป้อน context ของระบบเดิมก่อนตอบ ZeeSpec</p>



<ul class="wp-block-list">
<li>schema ปัจจุบัน แม้จะเป็น version ย่อก็ยังดีกว่าไม่มี</li>



<li>API pattern ที่ใช้อยู่ เช่น naming, response shape, error format</li>



<li>tech stack และ infrastructure ที่เปลี่ยนไม่ได้</li>



<li>constraint ที่เป็น non-negotiable เช่น ต้องใช้ PostgreSQL 14 หรือห้าม breaking change กับ client เดิม</li>
</ul>



<p class="wp-block-paragraph">ผมว่าข้อนี้ practical มาก เพราะ AI ที่ไม่เห็น schema จะออกแบบรอบ schema ไม่ได้ มันจะออกแบบ schema ใหม่ให้เราแทน ซึ่งใน brownfield นี่คือความเจ็บปวดล้วนๆ</p>



<h2 class="wp-block-heading">วิธีคิดต่างกันระหว่าง greenfield กับ brownfield</h2>



<p class="wp-block-paragraph">ถ้าเอามาแปลงเป็นภาษาคนทำงานจริง ผมจะสรุปแบบนี้ครับ</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>เรื่อง</th><th>Greenfield</th><th>Brownfield</th></tr></thead><tbody><tr><td>จุดเริ่มต้น</td><td>เริ่มจากศูนย์</td><td>เริ่มจากระบบที่มีข้อจำกัดอยู่แล้ว</td></tr><tr><td>ความเสี่ยงหลัก</td><td>AI invent สิ่งที่เราไม่ได้สั่ง</td><td>AI overwrite หรือ refactor สิ่งที่ยังทำงานอยู่</td></tr><tr><td>กลยุทธ์</td><td>ตอบให้ครบทุกมิติ</td><td>ล็อกของเดิม แล้วระบุเฉพาะ delta</td></tr><tr><td>สิ่งที่ควรเน้น</td><td>domain model, boundary, rule, failure behavior</td><td>compatibility, migration, rollback, non-breaking change</td></tr><tr><td>ประโยคเตือนใจ</td><td>อย่าให้ AI เดาโลกใหม่เอง</td><td>อย่าให้ AI ทำความสะอาดบ้านจนโยนของสำคัญทิ้ง</td></tr></tbody></table></figure>



<h2 class="wp-block-heading">Conflict ใน spec ไม่ใช่ edge case แต่มันคือ bug ตั้งแต่ยังไม่เขียนโค้ด</h2>



<p class="wp-block-paragraph">อีกประเด็นที่ผมชอบคือ เวลาคำตอบใน spec ขัดกัน ZeeSpec ไม่ควรปล่อยผ่าน</p>



<p class="wp-block-paragraph">เช่น ในมิติ WHO เราบอกว่าเฉพาะ Admin เท่านั้นที่ลบ user ได้ แต่ในมิติ WHEN เราบอกว่า unverified account จะถูกลบอัตโนมัติหลัง 30 วัน แบบนี้มันมี conflict อยู่แล้ว</p>



<p class="wp-block-paragraph">ถ้าเราไม่ resolve ตอน spec AI อาจ resolve ให้เองแบบเงียบๆ และเราอาจไม่รู้ด้วยว่ามันเลือกทางไหน</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Spec ที่ขัดกัน คือ bug ที่ยังไม่ได้ compile</p>
</blockquote>



<p class="wp-block-paragraph">ผมชอบประโยคนี้มาก เพราะมันทำให้เราเปลี่ยนมุมมองจาก “เดี๋ยวค่อยดูตอน implementation” เป็น “ต้องเคลียร์ก่อนให้ AI ลงมือ”</p>



<h2 class="wp-block-heading">เอาไปใช้กับงานจริงได้ยังไง</h2>



<p class="wp-block-paragraph">ถ้าจะเอาแนวคิดนี้ไปใช้กับทีม software development ผมคิดว่าไม่จำเป็นต้องเริ่มด้วย 60 ข้อแบบเต็มทันที เพราะเดี๋ยวทีมจะรู้สึกว่าเอกสารกลับมาฆ่าเราอีกแล้ว 555</p>



<p class="wp-block-paragraph">เริ่มแบบเบากว่านั้นก็ได้ เช่น ก่อนให้ AI ทำ feature ใดๆ ให้ตอบ 6 ช่องนี้ให้ได้ก่อน</p>



<ul class="wp-block-list">
<li><strong>WHAT</strong> จะเพิ่มหรือเปลี่ยนอะไร และอะไรไม่อยู่ใน scope</li>



<li><strong>WHERE</strong> ต้องแตะ file, service, database, integration ไหนบ้าง และอะไรห้ามแตะ</li>



<li><strong>WHEN</strong> flow ใหม่เกิดตอนไหน กระทบ trigger เดิมไหม</li>



<li><strong>WHO</strong> role ไหนใช้ได้ role ไหนห้ามใช้</li>



<li><strong>WHY</strong> business rule สำคัญคืออะไร ทำไมต้องเป็นแบบนี้</li>



<li><strong>HOW</strong> migration, rollback, error, test ต้องเป็นอย่างไร</li>
</ul>



<p class="wp-block-paragraph">สำหรับ greenfield ให้ช่องพวกนี้เป็นการออกแบบระบบ สำหรับ brownfield ให้ช่องพวกนี้เป็นรั้วกัน AI ไม่ให้ไปช่วยแก้สิ่งที่ไม่ควรแก้</p>



<h2 class="wp-block-heading">Prompt แบบย่อสำหรับ greenfield</h2>



<p class="wp-block-paragraph">อันนี้ผมเรียบเรียงเป็น template สั้นๆ เอาไว้ใช้ได้เลย</p>



<pre class="wp-block-code"><code>System: &#91;ชื่อระบบ]
Assumption: เริ่มใหม่ ไม่มี infrastructure เดิม

WHAT: entity, relationship, boundary, สิ่งที่ห้ามมี, ข้อมูลที่ห้ามเก็บ
WHERE: infrastructure, data flow, integration, system boundary
WHEN: trigger ของ create/update/delete, expiry, blocking condition
WHO: role, permission, visibility, approval
WHY: business rule, intent, validation, เหตุผลของข้อจำกัด
HOW: error handling, recovery, consistency, idempotency, test

Generate a system spec with no unstated assumptions. If information is missing, ask before generating code.</code></pre>



<h2 class="wp-block-heading">Prompt แบบย่อสำหรับ brownfield</h2>



<p class="wp-block-paragraph">ส่วน brownfield ผมจะเน้นคำว่า unchanged และ delta ให้ชัด เพราะนี่คือหัวใจของระบบเดิม</p>



<pre class="wp-block-code"><code>Existing system context: &#91;paste schema / API pattern / tech stack / non-negotiable constraints]

New feature: &#91;ชื่อ feature] 

WHAT: delta only, new entity, changed field, สิ่งที่ exclude ชัดเจน 
WHERE: existing infrastructure unchanged, list what must not change 
WHEN: new trigger, conflict with existing trigger, blocking rule เดิมที่ยังต้องใช้ WHO: permission ใหม่อิง role เดิม, role ที่ห้าม access 
WHY: เหตุผลของ feature และเหตุผลที่ constraint เดิมยัง valid 
HOW: migration path, backward compatibility, rollback, tests Generate only the delta. 

Do not refactor existing components unless explicitly requested.</code></pre>



<h2 class="wp-block-heading">สิ่งที่ผมได้จากบทความนี้</h2>



<p class="wp-block-paragraph">ผมว่าประเด็นของ ZeeSpec ไม่ใช่แค่ “เขียน spec ให้ละเอียดขึ้น” แต่คือ “เปลี่ยนหน้าที่ของ spec”</p>



<p class="wp-block-paragraph">เมื่อก่อน spec มักเป็นเอกสารอธิบายให้คนอ่าน แต่ในยุค AI coding spec กลายเป็นรั้วกั้นพฤติกรรมของเครื่องมือ ถ้ารั้วหลวม AI ก็เดินออกนอกเขต ถ้ารั้วไม่บอกตำแหน่งท่อ มันก็อาจขุดโดนท่อ</p>



<p class="wp-block-paragraph">ฟังดูเหมือนกลับไปยุคเขียนเอกสารเยอะๆ แต่ผมว่าไม่ใช่ครับ จุดต่างคือ spec แบบนี้ไม่ได้เขียนเพื่อความสวยงามหรือ compliance อย่างเดียว แต่มันเขียนเพื่อควบคุมสิ่งที่จะถูก generate ออกมาจริง จะได้ไม่ต้องเสียเวลา เสียโทเค็น แล้วได้ผลลัพธ์ผิดๆ แบบที่ทำให้อารมณ์เสีย</p>



<p class="wp-block-paragraph">และยิ่ง AI เขียนโค้ดได้เร็วขึ้นเท่าไร spec ยิ่งสำคัญขึ้นเท่านั้น</p>



<p class="wp-block-paragraph">เพราะความเร็วไม่ได้ช่วยอะไร ถ้าเอไอลากเราวิ่งหลงทาง ผ่าม!</p>



<h2 class="wp-block-heading">แหล่งที่มา</h2>



<ul class="wp-block-list">
<li><a href="https://medium.com/@visrow/zeespec-spec-driven-development-for-greenfield-vs-brownfield-projects-c593b5d88186" target="_blank" rel="noopener">ZeeSpec- Spec Driven Development for Greenfield vs Brownfield Projects</a> โดย Vishal Mysore</li>



<li><a href="https://dev.to/vishalmysore/spec-driven-development-with-zeespec-greenfield-vs-brownfield-4103" target="_blank" rel="noopener">Spec Driven Development with ZeeSpec : greenfield vs brownfield</a> บน DEV Community</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://myifew.com/7769/zeespec-spec/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Spec-Driven Development ในยุค AI จะช่วยทีมทำงานได้เร็วขึ้น?</title>
		<link>https://myifew.com/7704/spec-driven-development-ai-thai/</link>
					<comments>https://myifew.com/7704/spec-driven-development-ai-thai/#respond</comments>
		
		<dc:creator><![CDATA[iFew]]></dc:creator>
		<pubDate>Fri, 19 Jun 2026 18:25:46 +0000</pubDate>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[AI Coding]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Spec Driven Development]]></category>
		<category><![CDATA[technology]]></category>
		<guid isPermaLink="false">https://myifew.com/?p=7704</guid>

					<description><![CDATA[AI ทำให้การเขียนโค้ดเร็วขึ้นก็จริง แต่คอขวดใหม่ของทีมซอฟต์แวร์กลับย้ายไปอยู่ที่ requirement, context และความเข้าใจร่วม บทความนี้ชวนมอง Spec-Driven Development ว่าอาจเป็นภาษากลางที่ทีมเทคไทยต้องมี ถ้าอยากใช้ AI ให้คุ้มกว่าการแค่พิมพ์ไวขึ้น]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">ตลอดเวลาที่โลกได้มีกระบวนการทำซอร์ฟแวร์ขึ้นมา &#8220;การเขียนโค้ด&#8221; มักเป็นคอขวดในกระบวน ที่มนุษย์ต้องใช้เวลาในการรังสรรค์โค้ดทีละบรรทัด ทำไปทีละฟีเจอร์ อาศัยแรงกายแรงใจแบบเต็มเหนี่ยว นั่งหลังขดหลังแข็งจนได้ซอร์ฟแวร์ขึ้นมาตัวหนึ่ง แต่เมื่อโลกได้รู้มี AI ที่ฉลาดพอ (สัก 2 ปีที่ผ่านมา) มาอยู่ข้างๆ แป้นพิมพ์ ภาพเดิมก็เริ่มเปลี่ยนเร็วเกินคาด แต่คอขวดไม่ได้หายไปจากกระบวนการพัฒนาซอร์ฟแวร์ มันแค่ย้ายที่จากบรรทัดโค้ดไปซ่อนตัวอยู่ใน requirement ที่คลุมเครือ บริบทและเงื่อนไขทางธุรกิจที่กระจัดกระจาย และคำถามง่ายๆ ที่ตอบยากอย่างไม่น่าเชื่อว่า “สุดท้ายแล้ว เรากำลังสร้างอะไรกันแน่ และขอบเขตมีแค่ไหน”</p>



<span id="more-7704"></span>



<p class="wp-block-paragraph"><em>หมายเหตุ: บทความนี้ฟิวส์กับเอเจ้นชมพู ได้เรียบเรียงและแปลจากต้นฉบับของ Evgeni Rusev เรื่อง <a href="https://evgenirusev.com/posts/spec-driven-development-guide/" target="_blank" rel="noopener">Spec-Driven Development: A Practical Guide for AI-Accelerated Teams</a></em></p>



<h2 class="wp-block-heading">วันที่โค้ดอาจไม่ใช่คอขวดอีกต่อไป</h2>



<p class="wp-block-paragraph">แก่นใหญ่ที่สุดของบทความนี้คือการชี้ให้เห็นว่า AI ทำให้การเขียนโค้ดเร็วขึ้นจริง แต่ไม่ได้ทำให้ซอร์ฟแวร์ดีขึ้นตามไปด้วย หรือการตัดสินใจดีขึ้นได้เองโดยอัตโนมัติ ถ้าการตั้งโจทย์ยังไม่ขมุกขมัว ขอบเขตยังไม่ชัดเจน และข้อมูลยังตกหล่น ถึงแม้เราจะมี AI โมเดลเก่งแค่ไหน ผลลัพธ์ก็ยังมีสิทธิ์หลงป่าอยู่ดี</p>



<p class="wp-block-paragraph">ผู้เขียนบทความ (Evgeni Rusev) มองว่าความสูญเสียครั้งใหญ่ของทีมยุค AI ไม่ได้เกิดตอนพิมพ์โค้ด แต่อยู่ในขั้นตอนก่อนหน้านั้นต่างหาก ตอนที่ทุกคนพยายามปะติดปะต่อว่า ซอร์ฟแวร์ที่ต้องการ จะต้องมีอะไรในเอกสาร requirement บ้าง ใครเคยตกลงอะไรไว้ เงื่อนไขทางธุรกิจคืออะไร ทำไมระบบถึงทำงานแบบนี้ และอะไรคือสิ่งที่ “ทุกคนรู้กันอยู่แล้ว” แต่ไม่มีใครพูดหรือเขียนมันออกมา</p>



<p class="wp-block-paragraph">ประโยคนี้มักได้ยินบ่อยๆในวงสนทนาของชาวเดฟ และฟังดูเจ็บๆ เพราะ AI อาจช่วยเขียน feature ได้ในเวลาอันสั้น ทว่าถ้าทีมยังต้องเสียเวลาขุดแชตเก่า ไล่อ่าน ticket เดิม และถาม System Analyst หรือ Senior Engineer ซ้ำๆ แล้วหละก็, productivity ที่เหมือนได้มาจาก AI ก็จะค่อยๆ หายไป จนสุดท้าย อาจจะทำงานได้เร็วกว่ากระบวนการเดิมเพียง 10-30% เท่านั้น (อ้างอิงจากหลายบทวิเคราะห์ เช่น <a href="https://arxiv.org/html/2410.12944v2">arxiv.org</a>, <a href="https://newsletter.getdx.com/p/how-much-does-ai-impact-development-speed">getdx.com</a>, <a href="https://www.mckinsey.com/capabilities/tech-and-ai/our-insights/the-ai-revolution-in-software-development">mckinsey.com</a> &#8211; ฟิวส์)</p>



<h2 class="wp-block-heading">จาก Ticket และ PRD ที่เขียนครั้งเดียว ไปสู่ Living Spec </h2>



<p class="wp-block-paragraph">ข้อแนะนำของบทความนี้ คือ ให้ใช้ <strong>spec</strong> เป็นเอกสารกลาง และต้องยังอธิบายได้ว่า “ระบบควรทำอะไรในตอนนี้” ไม่ใช่เมื่อสามเดือนที่แล้ว หรือไม่ใช่ตอน kickoff โปรเจกต์ และไม่ใช่ตามความทรงจำของใครคนใดคนหนึ่ง.. (เจ็บปวดอีกแล้ว ฮ่าๆ)</p>



<p class="wp-block-paragraph">ผู้เขียนได้แยกบทบาทของเอกสารได้คมมากๆ 3 ประเภท</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>ประเภทเอกสาร (Artifact)</th><th>หน้าตาของเอกสาร</th><th>ช่วงเวลา</th></tr></thead><tbody><tr><td><strong>PRD (Product Requirement Document)</strong></td><td>เอกสารส่งมอบอย่างเป็นทางการที่ระบุว่าผลิตภัณฑ์จะเป็นอย่างไร</td><td>Snapshot &#8211; เขียนเพียงครั้งเดียวในวันเริ่มต้นโครงการหรือกิจกรรม</td></tr><tr><td><strong>Issues, Request, Jira Ticket (or Story Card)</strong></td><td>ขอบเขตงานเล็กๆ ที่กำหนดไว้ซึ่งทีมกำลังดำเนินการในสปรินต์หรือกรอบช่วงเวลาหนึ่ง</td><td>Snapshot &#8211; จะฟรีช ณ ช่วงเวลาหนึ่งตามที่ PO/QA อนุมัติให้ทำ</td></tr><tr><td><strong>Spec หรือ Living Document</strong></td><td>คำอธิบายโดยละเอียดเกี่ยวกับสิ่งที่ผลิตภัณฑ์ทำได้ในปัจจุบันและสิ่งที่ควรจะทำได้ในอนาคต</td><td>Continuous &#8211; อัปเดตทุกครั้งที่ข้อกำหนดเปลี่ยนแปลง ที่ต้องสะท้อนความจริงปัจจุบันของพฤติกรรมระบบ</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">นี่คือความต่างที่สำคัญมาก เพราะ PRD และ Ticket จะถูกฟลีชไว้และเก่าไปเรื่อยๆ ตามระยะเวลาที่พัฒนานานขึ้นเรื่อยๆ ผู้เขียนเรียกมันว่าเป็นหลักฐานของอดีต ในขณะที่ Spec ที่ดีควรเปลี่ยนตามความจริง ดังนั้นจุดแตกต่างของ Spec จึงไม่ใช่แค่การเปลี่ยนคำเรียกใหม่เท่านั้น แต่มันคือปรับวิธีการคิด และการต่อรองกันว่า ซอร์ฟแวร์เรากำลังไปในทิศทางไหน</p>



<p class="wp-block-paragraph">อีกจุดที่ผู้เขียนเน้นชัด คือ Spec ไม่ควรกลายเป็น Technical Design Document หน้าที่ของมันคืออธิบาย <em>What</em> และ <em>Why</em> มากกว่า <em>How</em> ถ้าเอกสารเริ่มลงลึกถึง Endpoint, Database Schema หรือ Framework  มากเกินไป เราก็กำลังเอาแปลนบ้านไปปนกับวิธีการก่ออิฐ เทปูน แล้ว (เป็นจุดที่ผมชอบใจการเปรียบเทียบมาก &#8211; ฟิวส์)</p>



<p class="wp-block-paragraph">ตัวอย่าง เมื่อเทียบระหว่าง Spec (ในที่นี้คือ Product Spec) กับ Technical Spec</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Product Spec (อธิบายพฤติกรรม หรือเงื่อนไขทางธุรกิจ)</th><th>Technical spec / ADR (Solution)</th></tr></thead><tbody><tr><td>“Manager must approve any invoice over $5,000&#8243;</td><td>&#8220;Approval queue service with role-based routing&#8221;</td></tr><tr><td>&#8220;Submitter sees the approval status in real time&#8221;</td><td>&#8220;Push status updates via SSE / WebSocket&#8221;</td></tr><tr><td>&#8220;Approved invoices appear in the accounting system within 24 hours&#8221;</td><td>&#8220;Nightly batch sync to the accounting API&#8221;</td></tr><tr><td>&#8220;Submitter can attach a PDF receipt up to 25 MB&#8221;</td><td>&#8220;Pre-signed S3 upload; 25 MB enforced server-side”</td></tr></tbody></table></figure>



<h2 class="wp-block-heading">Spec ที่ดี ไม่ได้เขียนละเอียดหรือเยิ่นเย้อเกินไป แต่ต้องชัดเจน</h2>



<p class="wp-block-paragraph">ที่ผมชอบบทความนี้ คือ มันไม่ได้บอกแค่ว่า “ควรมี Spec” แต่ยังบอกด้วยว่า Spec ที่ใช้งานได้ควรมีอะไรบ้าง อย่างน้อยที่สุดควรตอบคำถามเหล่านี้ให้ได้</p>



<ul class="wp-block-list">
<li>ปัญหาที่กำลังแก้คืออะไร</li>



<li>ใครคือผู้ใช้หรือผู้ได้รับผลกระทบ</li>



<li>เป้าหมายคืออะไร</li>



<li>อะไรคือสิ่งที่ตั้งใจไม่ทำ</li>



<li>งานจะถือว่าเสร็จเมื่อไร</li>



<li>มีข้อจำกัดอะไรที่ห้ามแตะ</li>



<li>มีความเสี่ยงหรือคำถามอะไรที่ยังเปิดอยู่</li>
</ul>



<p class="wp-block-paragraph">ฟังดูเหมือนเรื่องพื้นฐาน แต่หลายทีมกลับไม่ค่อยเขียนส่วนที่สำคัญที่สุดอย่าง <strong>non-goals</strong> และ <strong>acceptance criteria</strong> ทั้งที่สองอย่างนี้คือรั้วกัน scope creep และเป็นภาษากลางที่ช่วยให้ PM, Dev, QA และ AI มองโจทย์เดียวกันด้วยสายตาใกล้เคียงกันมากขึ้น</p>



<p class="wp-block-paragraph">พูดให้ง่ายขึ้น Spec ที่ดีไม่ใช่เอกสารที่เยอะ แต่เป็นเอกสารที่ทำให้การเดาลดลง คนอ่านแล้วไม่ต้องตีความเอาเองเยอะ และ AI อ่านแล้วไม่เผลอเลี้ยวเข้าเส้นทางที่ไม่มีใครตั้งใจให้ไป</p>



<p class="wp-block-paragraph">ลองดูตัวอย่างโครงสร้างของ Spec (ซึ่งถ้าใครเคยสังเกต Spec ที่ AI เขียน ก็จะมีหัวข้อพื้นฐานประมาณนี้แหละ &#8211; ฟิวส์)</p>



<pre class="wp-block-code"><code># &#91;Feature Name]

**Status:** Draft | In Review | Approved | Superseded
**Owner:** &#91;Name / Team]
**Last Updated:** &#91;YYYY-MM-DD]

## Problem
A specific story showing why the status quo doesn't work. Name the user.

## Users
| User           | Role           | Context              |
| -------------- | -------------- | -------------------- |
| &#91;Name/Persona] | &#91;What they do] | &#91;Relevant details]   |

## Goals
- &#91;Outcome this feature serves]

## Non-Goals
- &#91;Thing we are deliberately not doing — prevents scope creep]

## Acceptance Criteria
- **AC-1:** &#91;Concrete, testable, plain-language behavior]
- **AC-2:** ...

## Constraints
| Constraint | Source | Impact |

## Risks &amp; Open Questions
- &#91; ] &#91;Decision still to be resolved]</code></pre>



<h2 class="wp-block-heading">เหตุผลที่ AI ชอบเอกสารชัดๆ มากกว่าความคลุมเครือ</h2>



<p class="wp-block-paragraph">หนึ่งในประโยคที่คมที่สุดของบทความนี้คือ<em><strong> AI works from the spec, not from assumptions.</strong></em> </p>



<p class="wp-block-paragraph">ถ้าเราส่งงานให้ AI โดยข้อมูลยังแยกกันอยู่ใน Slack, Jira, meeting transcript หรือจากความทรงจำของใครสักคนในทีม AI โมเดลก็จะต้องเติมช่องว่างเองด้วยการเดา และหลายครั้งสิ่งที่เราบ่นว่าเป็น AI Hallucination หรือ อาการหลอนของ AI ก็อาจเป็นเพาะเราเอง ที่ป้อนข้อมูลให้แบบขาดๆ เกินๆ (โทษตัวเองบ้างนะ ฮ่าๆ)</p>



<p class="wp-block-paragraph">แต่ถ้าทีมมี Spec ที่ดี AI จะเห็นภาพรวมในที่เดียว มันรู้ว่าเป้าหมายคืออะไร อะไรเป็น non-goal อะไรห้ามเปลี่ยน และอะไรคือเกณฑ์ที่จะใช้ตัดสินว่างานเสร็จจริงหรือยังไม่เรียบร้อย แบบนี้ขอบเขตของความผิดพลาดจะลดลงเยอะมาก จากเดิมที่ให้ผลลัพธ์มั่วได้ตั้งแต่การตีความต้องการของเราผิด ก็จะเหลือเพียงปัญหาเชิง implementation ที่เราสามารถใช้กระบวนการ test และ review แก้ไขตามหลังได้</p>



<p class="wp-block-paragraph">นี่คือเหตุผลที่ผู้เขียนย้ำกฎเหล็กไว้ชัดมากว่า <strong>ต้องอัปเดต Spec ก่อนเขียนโค้ดเสมอ</strong> เพราะถ้า AI ทำงานต่อไม่ได้ สิ่งที่ควรทำไม่ใช่ฝืน prompt ใหม่ไปเรื่อยๆ แต่ต้องย้อนกลับมาแก้ความไม่ชัดเจนที่ต้นทางก่อน</p>



<h2 class="wp-block-heading">ถ้าอยากเริ่มใช้จริง ไม่จำเป็นต้องปฏิวัติทั้งองค์กรในวันเดียว</h2>



<p class="wp-block-paragraph">แนวคิดนี้สามารถเริ่มได้ไม่ยาก และเริ่มเล็กๆ ได้ ผู้เขียนแนะนำให้เริ่มจาก feature เดียวที่เจอความสับสนซ้ำๆ เช่น workflow อนุมัติเอกสาร การสร้างรายงาน การแจ้งเตือน หรือ onboarding flow แล้วเขียน spec ให้ชัดสำหรับเรื่องนั้นเรื่องเดียวก่อน</p>



<p class="wp-block-paragraph">จากนั้นค่อยกำหนด Standard ให้ทีมเขียน Spec เช่น</p>



<ul class="wp-block-list">
<li>เขียน goals และ non-goals ให้ครบ</li>



<li>ใช้ acceptance criteria เป็น definition of done ร่วมกัน</li>



<li>แยก spec ออกจาก technical design ให้ชัด</li>



<li>เมื่อ requirement เปลี่ยน ให้แก้ spec ก่อนเสมอ</li>



<li>ถ้ายังต้องใช้ Jira อยู่ ก็ใช้ต่อได้ แต่ให้มันทำหน้าที่ระบบติดตามงาน ไม่ใช่ที่เก็บความจริงสูงสุดของระบบ (ระวังจะ Outdate)</li>
</ul>



<p class="wp-block-paragraph">อีกเรื่องที่น่าสนใจคือวิธีวัดผล อย่าวัดแค่ว่า AI เขียนโค้ดเร็วขึ้นกี่เปอร์เซ็นต์ ลองวัดว่า สามารถขึ้นงานได้เร็วขึ้นไหม, จำนวนคำถามย้อนกลับลดลงไหม, QA กับ Dev เข้าใจตรงกันมากขึ้นไหม และเวลา review ใช้กับการแก้ความเข้าใจผิดน้อยลงหรือเปล่า ตัวชี้วัดพวกนี้อาจบอกความคุ้มค่าของ Spec ได้ชัดกว่าตัวเลขเรื่องความเร็วล้วนๆ</p>



<h2 class="wp-block-heading">ผมรู้สึกอย่างไรกับบทความนี้</h2>



<p class="wp-block-paragraph">สิ่งที่ผมชอบที่สุดในบทความนี้คือมันไม่ได้พยายามขายฝันว่า AI จะมาแทนทุกอย่างพรุ่งนี้เช้า แต่ค่อยๆ ชี้ให้เห็นว่า เมื่อเครื่องมือเร็วขึ้น ความเข้าใจและความต้องการของมนุษย์ยิ่งต้องชัดขึ้นด้วย ถ้าเมื่อก่อนเราแพ้เพราะเขียนโค้ดช้า วันนี้เราอาจแพ้เพราะคิดไม่ชัดแทน</p>



<p class="wp-block-paragraph">Spec-Driven Development จึงไม่ใช่แฟชั่นในการทำเอกสาร หรือการกำหนดรูปแบบเอกสารใหม่ แต่มันคือความพยายามจะเก็บ “ความหมายของระบบ” ไว้ในที่ที่ทั้งคนและเครื่องเข้าไปหยิบใช้ได้และเข้าใจตรงกัน </p>



<h2 class="wp-block-heading">อ้างอิง</h2>



<ul class="wp-block-list">
<li>Evgeni Rusev, <em>Spec-Driven Development: A Practical Guide for AI-Accelerated Teams</em><br><a href="https://evgenirusev.com/posts/spec-driven-development-guide/" target="_blank" rel="noopener">https://evgenirusev.com/posts/spec-driven-development-guide/</a></li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://myifew.com/7704/spec-driven-development-ai-thai/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
