<?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 Engineering &#8211; Few Steps &#8211; ก้าวสั้นๆ แต่ไปเรื่อยๆ</title>
	<atom:link href="https://myifew.com/tag/software-engineering/feed/" rel="self" type="application/rss+xml" />
	<link>https://myifew.com</link>
	<description></description>
	<lastBuildDate>Sat, 11 Jul 2026 18:44:37 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.4</generator>

<image>
	<url>https://myifew.com/wp-content/uploads/2018/07/cropped-logo6-ts-32x32.png</url>
	<title>Software Engineering &#8211; Few Steps &#8211; ก้าวสั้นๆ แต่ไปเรื่อยๆ</title>
	<link>https://myifew.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>AI Spec Writing Checklist: เขียนสเปกให้ AI เดาถูกขึ้น</title>
		<link>https://myifew.com/7820/ai-spec-writing-checklist/</link>
					<comments>https://myifew.com/7820/ai-spec-writing-checklist/#respond</comments>
		
		<dc:creator><![CDATA[iFew]]></dc:creator>
		<pubDate>Sat, 11 Jul 2026 18:44:35 +0000</pubDate>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[AI Coding]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[Spec-Driven Development]]></category>
		<guid isPermaLink="false">https://myifew.com/?p=7820</guid>

					<description><![CDATA[บันทึกจากบทความ How to write specs for AI ว่าทำไม spec ที่ดีช่วยให้ AI coding agent เดาผิดน้อยลง พร้อม checklist ก่อนส่งงานให้ AI ลงมือเขียนโค้ด]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">หลังๆ มานี้ผมใช้ skill พวก grill-me ในการ discovery ความต้องการตนเอง หรือเขียน reqruiement ตั้งต้นแล้วให้ grill-me มาถามเติมต่อ แต่ถึงกระนั้น ในตอนที่ผมเขียน requriement ตั้งต้นเอง ผมก็จะพยามเขียนให้ละเอียดที่สุดเท่าที่ตนเองจะทำได้ โดยเฉพาะ Features และ Business Condition ต่างๆ เพื่อให้ AI ไม่ต้องเดาใจความสำคัญของระบบที่ผมต้องการให้มันทำ และไม่ต้องหงุดหงิดความหลอน (hallucinate) ของมันด้วย</p>



<p class="wp-block-paragraph">ผมไปอ่านบทความของ <strong>Jaroslaw Wasowski</strong> เรื่อง <strong>How to write specs for AI</strong> แล้วรู้สึกว่าตรงกับสิ่งที่ผมทำอยู่ แต่ก็มีบางข้อน่าสนใจที่ผมต้องปรับเพิ่ม โดยเขาพูดตรงๆ ว่า หลายครั้งปัญหาไม่ได้อยู่ที่ model อย่างเดียว แต่อยู่ที่ spec ที่เราเขียนให้มันต่างหาก</p>



<p class="wp-block-paragraph">เพราะ AI ไม่ได้อ่านใจเราออก ดังนั้นถ้าเราเขียน requirement แบบคลุมเครือ มันก็ไม่ได้หยุดแล้วถามเหมือน senior developer ที่นั่งข้างๆ แต่มันจะเดาต่อจาก pattern ที่มันเคยเห็นมาใน training data แล้วบางทีเดาได้เนียนมาก เนียนจนสรุปออกมา หรือ code ดูเหมือนจะถูกต้อง แต่การใช้งานผิด (เป็นเหตุผลว่าผมต้องมี skill ให้มันตั้งคำถามผมไปเรื่อยๆ นอกจากช่วยคิดแล้ว ผมใช้เพื่อคอยเช็กความเข้าใจของมัน)</p>



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



<p class="wp-block-paragraph"><em>หมายเหตุ: บทความนี้อ้างอิงจาก<em>ประสบการณ์</em>ฟิวส์กับเอเจ้นชมพู เพื่อเรียบเรียงและแปลจากต้นฉบับของ Jaroslaw Wasowski เรื่อง <a href="https://levelup.gitconnected.com/how-to-write-specs-for-ai-7-rules-and-a-checklist-for-better-code-a5af2b2c6205" target="_blank" rel="noopener">How to write specs for AI: 7 rules and a checklist for better code</a></em></p>



<h2 class="wp-block-heading">ปัญหาไม่ใช่แค่ AI เขียนโค้ดผิด แต่คือมันไม่รู้ว่าอะไรห้ามเดา</h2>



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



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



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">สิ่งที่ไม่อยู่ spec เราในตอนแรก แต่จู่ๆ มันก็โผล่มา เพราะ AI จะเอา pattern จาก training data มาเติมแทนเจตนาของเรา (ซึ่งอาจจะผิด)</p>
</blockquote>



<p class="wp-block-paragraph">นี่แหละครับที่น่ากลัว เพราะ code ที่ออกมาอาจ compile ผ่าน, test ผ่าน หน้าตาดูดี แต่จริงๆ มันกำลังทำระบบที่มีการใช้งานหรือ behavior คนละแบบกับที่เราต้องการ</p>



<p class="wp-block-paragraph">เหมือนเราจ้างช่างมาทำบ้าน แล้วบอกแค่ว่า “ทำครัวให้ดีๆ หน่อย” ถ้าช่างทำครัวสวยมาก แต่ไม่มีปลั๊ก ไม่มีที่วางเตา หรือเปิดประตูตู้แล้วชนผนัง ปัญหาไม่ได้อยู่ที่ช่างไม่ขยันอย่างเดียว แต่อยู่ที่แบบบ้านของเราก็ไม่ได้บอกอะไรเขาเลย (อยากได้ครัวฝรั่งเตาไฟฟ้า แต่เอไอตั้งเตาอั่งโล่มาให้เพราะสเปกบอกว่ามีเตา 555)</p>



<h2 class="wp-block-heading">Spec ที่ดีต้องปิด 5 เรื่อง ที่ AI ชอบเดาเอง</h2>



<p class="wp-block-paragraph">บทความนี้สรุป 5 เรื่องหลักๆ ซึ่งผมว่าตรงนี้เอาไปใช้กับ Jira ticket, GitHub/GitLab issue, Markdown spec หรือ prompt ตรงๆ ได้เลย</p>



<h3 class="wp-block-heading">1. Outcome ต้องชัดว่าอยากได้พฤติกรรมอะไร</h3>



<p class="wp-block-paragraph">เริ่มจากบอกผลลัพธ์ที่ต้องการ ไม่ใช่บอกให้มันไปเขียน code แบบกว้างๆ เช่น แทนที่จะบอกว่า “ทำ endpoint export users เป็น CSV” ให้บอกว่า &#8220;endpoint นี้ต้องคืน active users เป็นไฟล์ CSV ที่ download ได้&#8221; และต้องมีเงื่อนไขความสำเร็จอะไรบ้าง (ภาษาเทคนิคจะเรียกว่า Acceptance Criteria)</p>



<p class="wp-block-paragraph">จุดนี้ช่วยแยก what ออกจาก how ได้ดีมาก เพราะ AI จะได้ไม่รีบเลือก implementation pattern ที่มันคุ้น แต่เริ่มจาก behavior ที่เราต้องการก่อน</p>



<h3 class="wp-block-heading">2. Scope กับ non-goals ต้องเขียนคู่กัน</h3>



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



<p class="wp-block-paragraph">เช่น ถ้าให้ AI ทำ export users ก็ควรบอกไปเลยว่า export เฉพาะ active users เท่านั้น ไม่ export deleted accounts ไม่ export billing data และไม่แก้ database schema</p>



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



<p class="wp-block-paragraph">จากประสบการณ์ผมเองที่สังเกต โมเดลฉลาดๆ อย่าง Claude Opus 4.8+ / ChatGPT 5.5+ มักจะบอกเลยว่า ผมจะทำสิ่งนี้ แต่ไม่ทำสิ่งนี้เพราะจะกระทบอะไรก็ว่าไป ซึ่งมันไม่เป็นกับบางโมเดลอื่นๆ ตรงนี้เราโดนพวก Frontier Model สปอยจนมองข้ามไป ฮ่าๆ</p>



<h3 class="wp-block-heading">3. Constraints คือรั้วกัน AI หลุดโลก</h3>



<p class="wp-block-paragraph">AI ไม่ได้รู้จัดโค้ดทั้ง repo ของเราจริงๆ ถ้าเราไม่ได้ให้ context มันแต่แรก, มันไม่รู้ว่าใช้ framework เวอร์ชันไหน มี convention อะไร library ไหนห้ามใช้ response format ต้องเป็นแบบไหน หรือ performance limit คือเท่าไร (แต่ก็ได้ยินบ่อยจากคนรอบข้าง (ระดับมหาราชา/มหาราชินี) คือให้ AI อ่านโค้ดทั้ง repo ก่อนเลย)</p>



<p class="wp-block-paragraph">ดังนั้น constraints ควรมีของพวกนี้:</p>



<ul class="wp-block-list">
<li>stack และ version ที่ใช้</li>



<li>repo convention ที่ต้องตาม</li>



<li>library ที่ใช้ได้หรือห้ามใช้</li>



<li>output format เช่น UTF-8, JSON shape, CSV delimiter</li>



<li>security หรือ performance limit</li>



<li>integration boundary เช่นห้ามแก้ schema หรือห้ามกระทบ API เดิม</li>
</ul>



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



<h3 class="wp-block-heading">4. Acceptance criteria ต้องพิสูจน์ได้ ไม่ใช่แค่ฟังดูดี</h3>



<p class="wp-block-paragraph">คำว่า “ใช้งานได้ดี” หรือ “make it work nicely” เป็นประโยคที่น่ากลัวมากสำหรับ AI เพราะมันไม่มีทางรู้ว่า nicely ของเราคืออะไร ดังนั้นเราต้องบอกมันว่า เงื่อนไขการรับงาน (Acceptance criteria) ของเราคืออะไร</p>



<p class="wp-block-paragraph">ซึ่ง Acceptance criteria ที่ดีควรเป็นแบบตรวจสอบได้ เช่น:</p>



<ul class="wp-block-list">
<li>ถ้ามี active users 3 คน ต้องได้ CSV 3 data rows และ header 1 แถว</li>



<li>ถ้าไม่มี users ต้องได้ header อย่างเดียวและ status 200</li>



<li>ถ้า user ไม่มี admin role ต้องได้ 403 และไม่ส่ง CSV body</li>



<li>ถ้ามีข้อมูล 50,000 records ต้องใช้ streaming และ response ไม่เกินเวลาที่กำหนด</li>
</ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">ถ้าไม่มีเกณฑ์ตรวจสอบได้ (ไม่ว่าจะมนุษย์ไม่เขียน หรือเอไอไม่ทำให้) ยังถือว่าเป็น Draft Requirement ไม่ใช่ Requirement จริง</p>
</blockquote>



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



<h3 class="wp-block-heading">5. Edge case กับ failure path ต้องมีตั้งแต่ก่อนเขียน code</h3>



<p class="wp-block-paragraph">Happy path เป็นแค่ส่วนหนึ่งของ production เท่านั้น แต่ spec จำนวนมากเขียนเหมือนโลกมีแต่ happy path ฮาาา</p>



<p class="wp-block-paragraph">อย่างน้อย spec ที่ส่งให้ AI ควรมี:</p>



<ul class="wp-block-list">
<li>error path 1 กรณี</li>



<li>edge case 1 กรณี</li>



<li>empty state หรือ permission case 1 กรณี</li>
</ul>



<p class="wp-block-paragraph">เพราะถ้าเราไม่เขียน มันจะเดาวิธี handle error จาก pattern ที่มันเห็นบ่อย ซึ่งอาจไม่ตรงกับระบบเราเลย</p>



<h2 class="wp-block-heading">Checklist ก่อนโยนงานให้ AI coding agent</h2>



<p class="wp-block-paragraph">ผมลองเอาแนวคิดในบทความมาจัดเป็น checklist table แบบที่น่าจะใช้จริงกับงานประจำวันได้ประมาณนี้ครับ</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>คำถาม</th><th>ผ่านหรือยัง</th></tr></thead><tbody><tr><td>Outcome ชัดไหมว่าระบบต้องทำพฤติกรรมอะไร</td><td>ถ้ายังตอบเป็นคำกว้างๆ เช่น ดีขึ้น เร็วขึ้น ใช้งานง่าย ให้เขียนใหม่</td></tr><tr><td>มี scope และ non-goals ไหม</td><td>ต้องบอกทั้งทำอะไร และไม่ทำอะไร</td></tr><tr><td>มี constraints ของ repo, stack, format, security, performance ไหม</td><td>ถ้าไม่มี AI จะเดาจากโลกทั่วไป ไม่ใช่จากระบบเรา</td></tr><tr><td>Acceptance criteria พิสูจน์ได้ไหม</td><td>ควรตรวจด้วย test, log, screenshot หรือ metric ได้</td></tr><tr><td>มี error path หรือ edge case ไหม</td><td>อย่างน้อยต้องมี 1 เคสที่ไม่ใช่ happy path</td></tr><tr><td>มีตัวอย่าง input/output ไหม</td><td>ตัวอย่างดีๆ หนึ่งชุด ลด ambiguity ได้เยอะมาก</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">checklist นี้ไม่ได้บอกให้เขียน spec ยาวเสมอไป แต่มันบอกให้ AI เขียน spec แบบเดาน้อยลง</p>



<h2 class="wp-block-heading">Spec ไม่ได้ต้องยาว แต่ต้องมี signal พอ</h2>



<p class="wp-block-paragraph">บทความต้นฉบับใช้คำว่า signal redundancy matched to complexity ซึ่งผมแปลแบบบ้านๆ ว่า รายละเอียดต้องพอดีกับความเสี่ยงของงาน</p>



<p class="wp-block-paragraph">ถ้าแค่แก้ margin หรือเปลี่ยน text เล็กๆ จะเขียน spec ยาว 3 หน้า ก็อาจเกินไป แต่ถ้างานแตะ authorization, payment, data integrity, migration, report export หรือ performance ตรงนี้ผมว่าไม่ควรประหยัด spec</p>



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



<h2 class="wp-block-heading">Workflow ที่ผมคิดว่าเอาไปใช้ได้ทันที</h2>



<p class="wp-block-paragraph">ถ้าจะเอาเรื่องนี้ไปใช้กับทีม software จริงๆ ผมคิดว่าไม่ต้องเริ่มจาก process ใหญ่โต แต่เริ่มจากงานหนึ่งชิ้นก่อนก็พอ</p>



<ol class="wp-block-list">
<li>เลือก feature หรือ change ที่มีขอบเขตงานและโค้ดชัดเจน (boundary)</li>



<li>เขียน spec ให้มี 5 เรื่องหลัก: outcome, scope, constraints, acceptance criteria, edge cases</li>



<li>review spec ก่อนให้ AI ลงมือ</li>



<li>ให้ AI implement พร้อม test</li>



<li>ถ้า test fail หรือ reviewer ต้องถามเพิ่ม ให้กลับไปแก้ spec ก่อน ไม่ใช่แค่สั่ง AI แก้ code ไปเรื่อยๆ</li>
</ol>



<p class="wp-block-paragraph">จุดนี้ผมว่ามันต่อกับแนวคิด Spec-Driven Development มาก คือ spec ไม่ใช่เอกสารประกอบงาน แต่เป็น contract ของงาน ถ้า code กับ spec ขัดกัน ต้องถามก่อนว่า spec ยังถูกไหม ไม่ใช่ปล่อยให้ code ที่ AI generate มาเป็นความจริงใหม่ของระบบ</p>



<p class="wp-block-paragraph">ข้อสุดท้ายสำคัญมาก และทำให้ Spec มีการอัพเดทตลอดเวลา (หรือที่เรียกว่า Living documentation)</p>



<h2 class="wp-block-heading">เรื่องที่ต้องระวัง อย่าเอา checklist ไปทำให้ทีมเหนื่อยกว่าเดิม</h2>



<p class="wp-block-paragraph">ถึงผมจะชอบ checklist นี้มาก แต่ก็ไม่คิดว่าต้องใช้เต็มรูปแบบกับทุกงานนะครับ</p>



<p class="wp-block-paragraph">ถ้าเป็น bug fix เล็กๆ ที่ test เดียวพิสูจน์ได้ หรือ prototype ที่ตั้งใจ throw away อยู่แล้ว การเขียน spec ยาวอาจไม่คุ้ม</p>



<p class="wp-block-paragraph">อีกอย่างคือ spec ที่ดีไม่ได้แก้ทุกปัญหา AI ยังพลาดได้จาก model limitation, context retrieval ไม่ครบ, repo ใหญ่เกินไป หรือระบบเดิมซับซ้อนจน spec อธิบายไม่หมด</p>



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



<h2 class="wp-block-heading">สรุปแบบฟิวส์ๆ</h2>



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



<p class="wp-block-paragraph">เมื่อก่อนถ้า requirement คลุมเครือ senior developer อาจถามกลับ หรืออย่างน้อยก็รู้จาก context ของระบบว่าอะไรควรทำไม่ควรทำ แต่ AI coding agent ไม่ทำแบบนั้น ถ้าเราไม่บอก มันจะเดา</p>



<p class="wp-block-paragraph">และบางครั้งมันเดาแบบมั่นใจมากด้วยว่าจะถูก!</p>



<p class="wp-block-paragraph">ยิ่ง AI เขียน code เร็วเท่าไร เราก็ยิ่งต้องเขียนให้ชัดขึ้นเท่านั้นครับ</p>



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



<ul class="wp-block-list">
<li><a href="https://levelup.gitconnected.com/how-to-write-specs-for-ai-7-rules-and-a-checklist-for-better-code-a5af2b2c6205" target="_blank" rel="noopener">How to write specs for AI: 7 rules and a checklist for better code</a> โดย Jaroslaw Wasowski, Level Up Coding</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://myifew.com/7820/ai-spec-writing-checklist/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
