Final Project
ทำของจริงให้ user จริง
ไม่ใช่ "แอปเดโม่" · ไม่ใช่ "ทำส่งครู" · นี่คือ "ของที่จะใช้จริงกับเพื่อน 1 คน" — รวมทุกทักษะจาก W01-W14 และเป็นชิ้นที่ใส่ใน portfolio ได้
🎯 เป้าหมาย Final Project
สิ่งที่ทำให้ Final Project ของคู่มือนี้ ต่างจาก Final Project ทั่วไป — เกณฑ์ประเมินคือ:
- ✅ มี "real user" 1 คน ที่ "ขอใช้ด้วยตัวเอง"
- ✅ ของถูก ใช้จริงอย่างน้อย 3 ครั้ง ในชีวิตจริง
- ✅ User "พอใจ" และ "แนะนำให้คนอื่นใช้"
- ❌ ไม่นับ — "ทำสวย", "ใช้เทคโนโลยีใหม่", "code เยอะ"
📋 Spec — Final Project Requirements
| ข้อกำหนด | รายละเอียด |
|---|---|
| Real user | 1 คน · ไม่ใช่คุณเอง · ไม่ใช่อาจารย์ |
| Real problem | ปัญหาที่ user มีจริง · ไม่ใช่ที่คุณคิดเอง |
| Pipeline ครบ | Problem → Workflow → Spec → Build → Test → Deploy → Demo → Maintain |
| Tech | Python · อย่างน้อย 1 ใน: web app / API / data dashboard / desktop app / bot |
| Persistence | เก็บข้อมูลถาวร (JSON / SQLite / Sheet / Postgres) |
| Test | ≥ 10 unit tests · pass ทั้งหมด · AI test review checklist (W13) |
| Deploy | คนอื่นใช้ได้โดยไม่ลง Python · มี mobile-accessible channel (PWA/LINE/responsive web) |
| Monitoring | UptimeRobot ping /health + Sentry crash report (W14) |
| Cost ceiling | Budget alert ทุก service ที่ใช้ · < $5/เดือน |
| Privacy | ถ้าเก็บข้อมูล user — consent + anonymize + .gitignore raw data (W10) |
| Docs | README · spec.md · architecture diagram (C4 + sequence) · CHANGELOG · ADR |
| AI Disclosure | AI_USAGE.md — อะไรที่ AI ช่วย · อะไรที่คุณเขียนเอง |
| Demo | 5 นาที · user ใช้จริงต่อหน้าคน · บน mobile (ถ้าทำได้) |
🗺 Traceability — Final Project ใช้ทักษะจาก W01-W14
Final Project = บทรวม · ทุก week ที่เรียนมา ต้องเห็นใน project · นี่คือ checklist ที่ขาดอะไรไม่ได้
Problem-finding] --> P[Final
Project] W02[W02
Tools+Vocab] --> P W03[W03
Diagrams] --> P W04W05[W04-W05
Read+Modify code] --> P W06[W06
Spec → AI] --> P W07[W07
CLI workflow] --> P W08[W08
Data + Schema] --> P W09W10[W09-W10
Data Project] --> P W11[W11
OOP] --> P W12[W12
APIs + LLM] --> P W13[W13
Test + Debug] --> P W14[W14
Deploy + Cost] --> P P --> Demo[🎓 Demo
+ Maintain] classDef foundation fill:#1e3a5f,stroke:#3776ab,color:#fff classDef literacy fill:#3d2c1a,stroke:#ffd43b,color:#fff classDef data fill:#0d3f3a,stroke:#2dd4bf,color:#fff classDef advanced fill:#3b2962,stroke:#8b5cf6,color:#fff classDef capstone fill:#5c2618,stroke:#ec4899,stroke-width:3px,color:#fff class W01,W02,W03 foundation class W04W05,W06,W07 literacy class W08,W09W10 data class W11,W12,W13,W14 advanced class P,Demo capstone
📝 Self-check: Project ของฉันใช้ทุก week มั้ย?
| Week | ใน Final Project เห็นที่ไหน? | เช็ค |
|---|---|---|
| W01 Problem-finding | มี real user · interview notes · problem statement | ☐ |
| W02 Tools+Vocab | เลือก tool stack + วาด architecture mental map | ☐ |
| W03 Diagrams | ≥ 3 Mermaid diagrams (C4 + sequence + ER) | ☐ |
| W04-W05 Read/Modify | อ่าน + แก้ code ที่ AI สร้าง · มี diff/PR ใน git | ☐ |
| W06 Spec → AI | spec.md ที่ Scorecard ≥ 75% | ☐ |
| W07 CLI workflow | Spec → Plan → Code → Test ครบ cycle | ☐ |
| W08 Data+Schema | Schema ที่ออกแบบเอง · ใช้ JSON/CSV/SQLite/Postgres | ☐ |
| W09-W10 Data | (ถ้ามี analyze) — privacy + AI verification ทำตามเกณฑ์ | ☐ |
| W11 OOP | ใช้ class เมื่อจำเป็น · ไม่ over-engineer · type hints | ☐ |
| W12 APIs+LLM | (ถ้ามี) API key ใน .env · LLM ใช้ Haiku ตอนเรียน · cache | ☐ |
| W13 Test | ≥ 10 pytest · CI/CD pass · AI test review | ☐ |
| W14 Deploy | Cloud + Mobile access · monitoring + budget alert | ☐ |
🚦 Day 0 — Pre-flight Checklist (ก่อนเริ่ม)
"ก่อนวันที่ 1" — ตอบ 8 ข้อนี้ก่อน · ถ้าตอบไม่ได้ → กลับไปคิด · เริ่มก่อนพร้อม = เสียเวลาทีหลัง
| # | คำถาม | ตอบใน 1 ประโยค |
|---|---|---|
| 1 | User คือใคร? (ชื่อจริง · role) | ______________________ |
| 2 | Pain point เฉพาะที่จะแก้? | ______________________ |
| 3 | User บอก "อยากใช้" แล้วหรือยัง? | ☐ ใช่ ☐ ยัง — กลับไปสัมภาษณ์ |
| 4 | Deployment target? | ☐ Cloud Web ☐ Mobile ☐ Desktop ☐ IoT |
| 5 | เก็บข้อมูลส่วนตัวมั้ย? | ถ้าใช่ → ต้องทำ consent + anon (W10) |
| 6 | ใช้ external API / LLM มั้ย? | ถ้าใช่ → ต้องตั้ง budget alert |
| 7 | Scope ทำใน 7 วันได้แน่? | ถ้าไม่แน่ → ตัด feature ครึ่งหนึ่ง |
| 8 | Plan B ถ้า user ไม่ใช้? | ______________________ |
📜 Proposal Approval Gate
ส่ง proposal สั้น ๆ 1 หน้า ให้อาจารย์ "ก่อนเริ่ม" · ได้ approve ก่อน Day 1 · ป้องกัน scope ใหญ่เกิน
# Final Project Proposal — [ชื่อ project]
**User:** [ชื่อจริง · role · ทำไมเลือกคนนี้]
**Problem:** [1-2 ประโยค]
**Solution:** [1 ประโยค]
**Tech stack:** [Streamlit / Flask / LINE bot / ...]
**Deployment target:** [Cloud / Mobile / Desktop / IoT]
**Privacy:** [เก็บข้อมูลส่วนตัวมั้ย · จัดการยังไง]
**External services:** [API ที่ใช้ · cost estimate]
**Risk + Plan B:** [ความเสี่ยง 2 อย่าง + plan B แต่ละอัน]
**Why it's "right size":** [ทำไมไม่ใหญ่/เล็กเกิน]
🔐 Privacy + Ethics Review
ถ้า project เกี่ยวข้องกับ ข้อมูลของคนอื่น → ต้องผ่าน review นี้ก่อน deploy
✅ Privacy Checklist (จาก W10)
- ☐ User ยินยอม ให้ใช้ข้อมูล (consent ในรูปแบบที่บันทึกได้)
- ☐ ระบุชัด "ข้อมูลใช้ทำอะไร" ใน description
- ☐ ระบุชัด "ใครเห็น raw data ได้"
- ☐ ระบุชัด "ลบเมื่อไหร่" หลังคอร์สจบ
- ☐ Raw data ไม่ ใน public repo (gitignore
private/) - ☐ Anonymize ID/email ก่อน analyze · ก่อน publish dashboard
- ☐ ถ้าเก็บ password → hash ด้วย bcrypt · ไม่เก็บ plaintext
- ☐ ถ้าเก็บ API key → ใน
.env· ไม่ใน code
⚖️ Ethics Checklist
- ☐ Project ไม่ harm ใคร (รวมทาง emotional / financial / reputational)
- ☐ AI ที่ใช้ ไม่ bias ในทาง gender/race/socioeconomic ที่ damage user
- ☐ Automation ไม่ replace human judgment ในเรื่องสำคัญ (ตัดสินใจทางการแพทย์/กฎหมาย)
- ☐ User เลือกออก ได้ตลอดเวลา
- ☐ ไม่ scrape ข้อมูลที่ไม่ได้รับอนุญาต (social media posts, web data)
- ☐ ไม่ใช้ copyrighted content เป็น training data
- ☐ ถ้า project เกี่ยวกับ hardware/IoT — มี fail-safe (W13: safety test)
- ❌ ระบบ surveillance / monitor คนโดยไม่บอก
- ❌ AI ตัดสินใจอัตโนมัติเรื่อง health/legal/financial โดยไม่มี human review
- ❌ Scrape ข้อมูล Facebook/IG/TikTok ที่ไม่ใช่ของตัวเอง
- ❌ "Predict student performance" จาก demographic — bias risk สูง
- ❌ Deepfake / voice clone ของคน real โดยไม่ได้รับอนุญาต
🤖 AI Usage Disclosure — Academic Honesty
AI ช่วยเขียน code คือเรื่องปกติในยุคนี้ · แต่ "การไม่บอก" = academic dishonesty ·
ทุก Final Project ต้องมี AI_USAGE.md บอกตรง ๆ
📄 Template — AI_USAGE.md
# AI Usage Disclosure
## Tools ที่ใช้
- Cursor (Claude Sonnet 4.6) — main pair-programming
- ChatGPT (gpt-4o) — debug ครั้งคราว
- Claude API (Haiku) — ใน production สำหรับ summary feature
## AI ทำอะไรให้บ้าง
- [✅] เขียน boilerplate (`Flask app`, route definitions)
- [✅] สร้าง test cases หลังจากเขียน function เอง
- [✅] อธิบาย error message ที่ไม่เข้าใจ
- [✅] Generate Mermaid diagrams จาก spec
- [⚠️] เขียน function `calculate_grade()` ครั้งแรก · ผมแก้ logic เอง
- [❌] **ไม่ได้** ใช้ AI สำหรับ: spec writing · user interview · ตัดสินใจ scope
## สิ่งที่ผมเขียนเองล้วน ๆ
- spec.md
- user interview notes
- architecture decision records
- regression tests สำหรับ bug ที่เจอ
- README
## สิ่งที่ AI พลาด · ผมต้องแก้
1. AI ใช้ `df.dropna()` ทำลายข้อมูล 30% — แก้เป็น `dropna(subset=["x"])`
2. AI สร้าง class hierarchy 5 ชั้น สำหรับ "add 2 numbers" — refactor เป็น function
3. AI mock function ผิด level — แก้ patch ที่ถูกต้อง
- ป้องกัน trouble — บอกตอนต้นปลอดภัยกว่าโดน catch ตอนหลัง
- แสดง maturity — บอกได้ละเอียดว่าจัดการ AI ยังไง = mark of senior engineer
- เรียนรู้ — เห็นชัดว่าตัวเองยังต้องเก่งตรงไหน
- Industry standard — บริษัทใหญ่ ๆ ต้องการ disclosure แบบนี้
🛡 Risk Register — รู้ว่าอะไรจะพัง ก่อนพัง
เขียน 3-5 ความเสี่ยง ที่ project อาจเจอ + plan B ของแต่ละอัน · ทำใน Day 0 · ทบทวนทุกวัน
📋 Risk Register Template
| Risk | Likelihood | Impact | Plan B |
|---|---|---|---|
| API ของ vendor ล่ม (LINE, IQAir) | Medium | High | cache last value + retry · ถ้าล่ม > 1 ชม. → manual mode |
| User เลิกใช้กลางคัน (Day 4) | Medium | High | มี user ที่ 2 (เพื่อนคนที่สนใจ) เป็น backup |
| Cost ทะลุ free tier | Low | High | budget alert at $1 · kill switch พร้อม |
| เครื่อง dev พัง / WiFi ตก | Medium | Medium | code ใน GitHub + Codespaces backup · phone hotspot |
| Demo day app crash | Low | Very High | Local backup version · video screenshot ของการใช้จริง |
📝 ADR — Architecture Decision Records
ทุกครั้งที่ตัดสินใจใหญ่ (เลือก SQLite vs Postgres · เลือก Streamlit vs Flask · เลือก LLM ตัวไหน) → เขียน 1 ADR · ในงานจริง = standard practice
📄 Template — docs/adr/0001-choose-streamlit.md
# ADR-0001: เลือก Streamlit Cloud แทน Cloud Run
## Status
Accepted (2026-05-15)
## Context
- User เป็น TA ของอาจารย์ · เปิด URL บน laptop ในห้อง lab
- ต้องการ data dashboard ที่อัพเดตทุก 30 นาที
- มีเวลา 7 วัน · ทำคนเดียว
## Decision
ใช้ Streamlit Cloud (free tier) แทน Cloud Run
## Reasons
- ✅ Streamlit = Python ทั้งหมด · ไม่ต้องเขียน HTML/CSS
- ✅ Streamlit Cloud free · ไม่ต้องตั้ง Docker
- ✅ Deploy ใน 2 นาทีจาก git push
- ❌ Streamlit Cloud bandwidth limit · แต่ user 1 คน · พอ
- ❌ ไม่มี SLA — ถ้าพัง รอ 10 นาที · OK สำหรับ demo
## Consequences
- ถ้า user หลายคนใช้ → ย้ายเป็น Cloud Run
- ถ้าต้องการ custom domain → ต้อง upgrade ($20/เดือน) หรือใช้ Render
ทุก ADR 1 หน้า · 4-5 ADR ใน Final Project ก็พอ · ใส่ใน docs/adr/
♿ Accessibility — User บางคนต้องการความช่วยเหลือ
ถ้า user คือ พ่อ-แม่ (ตามตัวอย่างใน table) → accessibility สำคัญมาก · ถ้า user คือ เพื่อน Gen Z → ยังสำคัญ (50% ใช้บนมือถือ outdoor · จอเล็ก)
✅ Accessibility Checklist (เริ่มต้น)
- ☐ Font size ≥ 16px บน mobile · ≥ 14px บน desktop
- ☐ Color contrast ratio ≥ 4.5:1 (ใช้ WebAIM Contrast Checker)
- ☐ ไม่ใช้สีอย่างเดียว สื่อความหมาย (เพิ่ม emoji / text label) · เผื่อ colorblind
- ☐ Button area ≥ 44×44 px บนมือถือ (Apple guideline)
- ☐ Error message ภาษาไทย ที่อ่านเข้าใจ · ไม่ใช่ stack trace
- ☐ Loading indicator ทุกที่ที่ใช้เวลา > 1 วินาที
- ☐ ไม่ require account ถ้าไม่จำเป็น (พ่อแม่ลืม password)
- ☐ Test กับ user จริง ไม่ใช่แค่ตัวเอง — ทักษะ tech ของแต่ละคนต่างกัน
⏱ Estimation — ทำไม "7 วัน" จะกลายเป็น "14 วัน"
ความจริงของนักศึกษาทุกคน: ประเมินงานต่ำกว่าจริง 2-3 เท่า · "ผมว่าใช้ 2 ชั่วโมง" → 6 ชั่วโมง · "เสร็จคืนนี้" → 3 วัน · นี่ไม่ใช่ความขี้เกียจ — มัน "Planning Fallacy" ที่นักจิตวิทยายืนยันมา 30 ปี
📊 ทำไมประเมินผิด
| เหตุผล | ตัวอย่าง |
|---|---|
| 1. จำแค่ happy path | "แค่เขียน Flask app" — ลืม env setup, debug, deploy, test |
| 2. ไม่นับ "ของที่ไม่รู้" | API doc อ่านยาก · auth พัง · cost limit · time zone bug |
| 3. ไม่นับ context switch | กิน · นอน · เรียนวิชาอื่น · ตอบ LINE · กลับมา = 30 นาทีหาที่ |
| 4. ไม่นับ "ของที่พัง" | Mac update ลบ Python · WiFi ตก · เครื่อง crash |
| 5. Optimism bias | "ครั้งนี้จะดี" — ทุกครั้งก็คิดอย่างนี้ |
📐 วิธีประเมินที่แม่นยำขึ้น — 3-Point Estimate
แทนที่จะให้ตัวเลขเดียว → ให้ 3 ตัว: best / likely / worst · เฉลี่ยน้ำหนัก
# Pessimistic-weighted average (PERT formula)
estimate = (best + 4 × likely + worst) / 6
ตัวอย่าง:
"Deploy ขึ้น Cloud Run"
- best: 30 นาที (ทำมาแล้ว · ทุกอย่างพร้อม)
- likely: 2 ชั่วโมง (ปกติ)
- worst: 6 ชั่วโมง (ติด billing · ติด IAM · ติด Docker)
→ (0.5 + 4×2 + 6) / 6 = 2.4 ชั่วโมง
🪜 Task Breakdown — เล็กไปเรื่อย ๆ จนเห็นชัด
ถ้าประเมินยาก = task ใหญ่เกิน · แตกเป็น sub-task < 2 ชั่วโมงต่ออัน
📈 กฎ "2x + 30% Buffer"
- ประเมินอย่างซื่อสัตย์ → ได้ X ชั่วโมง
- คูณ ×2 สำหรับสิ่งที่ลืม
- เพิ่ม 30% buffer สำหรับ "ของที่ไม่รู้ว่าไม่รู้"
- = (X × 2) × 1.3 = X × 2.6
📋 Time-boxing — กฎเหล็กของ 7-day project
| กฎ | ทำยังไง |
|---|---|
| Hard time box ทุก task | ตั้ง timer · task X = 2 ชม. · เกินแล้วหยุด · review |
| "Done is better than perfect" | ทำให้ครบ MVP ก่อน · polish หลัง |
| End-of-day check-in | 15 นาทีท้าย — เช็คว่าตามแผน? · ต้อง descope มั้ย? |
| Buffer day = Day 7 | Day 1-6 = build · Day 7 = test + demo · ห้าม build ใหม่ใน Day 7 |
| Descope ไม่ใช่ความล้มเหลว | "ตัด feature 1 → ส่งทัน" > "ทำครบ → ส่งช้า" |
⚡ ถ้าใช้ AI — เพิ่มความเร็วไม่ใช่ครึ่ง
AI "ลดเวลาเขียน code" 50-80% · แต่ "เวลา debug + verify" เพิ่มขึ้น · เพราะต้อง review สิ่งที่ AI สร้าง · net = "ประหยัด ~30%" ถ้าใช้เป็น
| Phase | เวลาไม่มี AI | เวลาใช้ AI |
|---|---|---|
| Write boilerplate | 4 ชม. | 30 นาที ⚡ |
| Debug | 2 ชม. | 1.5 ชม. (AI ช่วยอ่าน error) |
| Test writing | 2 ชม. | 1 ชม. (แต่ + 30 นาที review test) |
| Review AI output | 0 | +1.5 ชม. ⚠️ |
| Doc writing | 2 ชม. | 45 นาที |
| Total | 10 ชม. | ~5.5 ชม. |
📅 Timeline 7 วัน
| วัน | งาน | Deliverable |
|---|---|---|
| วันที่ 1 | หา user + เข้าใจปัญหา | Interview note + Problem statement |
| วันที่ 2 | เขียน Spec + Diagram | spec.md + diagrams.md |
| วันที่ 3-4 | Build MVP (Minimum Viable Product) | Code ทำงานได้ในเครื่อง |
| วันที่ 5 | Test + Bug fix + Polish | tests pass · ใช้ได้แบบไม่พัง |
| วันที่ 6 | Deploy + Docs | URL หรือ .exe + README + changelog |
| วันที่ 7 | User test + Iterate + Demo | User feedback + final version |
🎨 ตัวอย่าง Project ที่ "ใช่"
| Project | User | Tech |
|---|---|---|
| ตัวคำนวณค่าน้ำมัน + แบ่งเงินกลุ่ม | เพื่อนที่ขับรถไปกินข้าวกัน | Streamlit + SQLite |
| ระบบจัดตาราง lab CNC ของห้อง | TA ของอาจารย์ | Flask + Google Sheets |
| Bot ส่งเตือน LINE เมื่อ PM2.5 สูง | เพื่อนที่เป็นหอบหืด | Python loop + IQAir API + LINE |
| Dashboard ค่าใช้จ่ายรายเดือน | น้อง / แม่ | Streamlit + Google Forms |
| เครื่องช่วยจดสมุดงานของพ่อ | พ่อที่ทำธุรกิจเล็ก | Desktop tkinter app + .exe |
| Auto-grader Lab พื้นฐาน | TA | Python + pytest + Local LLM (Ollama) |
| เครื่องสรุปบทเรียนจาก YouTube | เพื่อนที่ไม่ทันเข้าฟัง | Whisper + Claude API |
🚫 ตัวอย่าง Project ที่ "ไม่ใช่"
- ❌ "Tetris" — ไม่มี user จริงเดือดร้อนกับเกม
- ❌ "Chatbot ตอบทุกคำถาม" — ไม่มี user เฉพาะ
- ❌ "AI Trading Bot" — เกินขอบเขต · เสี่ยง · ไม่มี user จริง
- ❌ "ระบบของมหา’ลัย" — ใหญ่เกิน · ไม่มี authority
- ❌ Copy tutorial มาเปลี่ยนชื่อ — ไม่มีคุณค่าใหม่
📋 Process — Spec ก่อน Code
วันที่ 1: หา User
- คิดถึงคนรอบตัวที่ "บ่นเรื่องเดิม" บ่อย — เพื่อน, ครอบครัว, TA
- นัดคุย 30 นาที — ฟังว่าเขาเสียเวลากับอะไร
- ถาม: "ถ้ามีเครื่องช่วยทำ X ให้ คุณจะใช้บ่อยแค่ไหน?"
- เลือก 1 ปัญหา → จด Problem Statement
วันที่ 2: Spec + Diagram
ใช้ template จาก W06:
## Spec: [ชื่อ project]
**User:** [ใคร · role · skill level]
**Problem:** [1 ย่อหน้า]
**Success criteria:** [user ทำอะไรได้ที่ทำไม่ได้ก่อน]
**Workflows:**
1. [Use case 1 · step-by-step]
2. ...
**Data:**
- [schema · primary keys]
**Constraints:**
- [tech limitation · time · cost]
**Non-goals:**
- [สิ่งที่ "ยังไม่ทำ"]
**Acceptance test:**
- [test scenario ที่ user ลงมือทำได้]
+ Diagrams (W03):
- C4 Container — ระบบมีอะไรบ้าง
- Sequence — flow หลัก
- ER — data schema
วันที่ 3-4: Build MVP
MVP = "ทำให้ user ทำสิ่งที่ตั้งใจให้ทำได้ ก่อน" · ไม่สวย ไม่ครบ · แต่ "ผ่านจุด pain" ของเขา
- เริ่ม database schema (JSON/SQLite ก่อน)
- เขียน function ที่ใช้บ่อยที่สุดก่อน — happy path
- สร้าง UI (CLI / Streamlit / Flask) ที่ใช้ function นั้น
- commit หลังทุก feature ที่ทำงานได้
- หยุดเมื่อ "ครบ user story หลัก" · อย่าเพิ่ม feature ขณะ build
วันที่ 5: Test + Polish
- เขียน pytest ≥ 10 cases
- ลอง edge cases (W13)
- เพิ่ม error message ที่ user อ่านเข้าใจ
- ทำ UI ให้พอใช้ — ไม่ต้องสวย แต่อย่าทำ user สับสน
- เซฟ
regressions.mdเผื่อ AI ทำพัง
วันที่ 6: Deploy + Docs
- เลือก deploy method ตาม W14
- ทดสอบ "fresh clone" — เพื่อนคนที่ไม่ใช่ user ลอง install
- เขียน README ครบ — install + usage + screenshot
- changelog.md + version 1.0.0
วันที่ 7: User Test + Demo
- นัด user ใช้จริง 30 นาที
- นั่งดูเขาใช้ "ไม่ช่วย" — สังเกตจุดที่งง
- ถามคำถาม 3 ข้อ: "ใช้ง่ายมั้ย", "มีอะไรหายไป", "จะใช้อีกมั้ย"
- แก้ของที่ user บ่นภายใน 2 ชั่วโมง
- Demo 5 นาที — user ใช้จริงต่อหน้าคน
📊 Rubric (100 คะแนน)
| เกณฑ์ | คะแนน | วัดจาก |
|---|---|---|
| Problem-finding + User research | 10 | real user · interview note · proposal approved |
| Spec + Diagrams + ADR | 12 | spec.md ผ่าน Scorecard ≥ 75% · ≥ 3 diagrams · ≥ 3 ADR |
| Build quality | 15 | working MVP · code อ่านง่าย · structure ตาม W11 · ไม่ over-engineer |
| Test + CI/CD | 10 | ≥ 10 pytest · pass · AI test review checklist · GitHub Actions green |
| Deployment (multi-channel) | 12 | Cloud + mobile-accessible (PWA/LINE/responsive) — ดูใน mobile ได้ |
| Monitoring + Cost | 8 | Sentry/UptimeRobot setup · budget alert ทุก service · < $5/เดือน |
| 🔐 Privacy + Ethics | 8 | Privacy checklist ผ่าน · ไม่มี PII ใน repo · consent ถ้าต้องการ |
| ♿ Accessibility | 5 | Accessibility checklist ≥ 6/8 · test กับ user จริง |
| 🤖 AI Disclosure | 5 | AI_USAGE.md ครบ · honest disclosure |
| Documentation | 5 | README · CHANGELOG · screenshot · "fresh clone" works |
| User test + Iterate | 5 | หลักฐานว่า user ใช้จริง ≥ 3 ครั้ง + feedback |
| Demo | 5 | เล่าได้ใน 5 นาที · user ใช้สำเร็จต่อหน้า |
| Reflection | 5 | เขียน "เรียนรู้อะไร" 1 หน้า · honest |
🎤 Format ของ Demo
1. Hook (30 sec)
"[User] เคยเสียเวลา X ทุกวัน · ผมสร้าง [Y] ให้เขา"
2. Problem (1 min)
- แสดง workflow เดิม (flowchart)
- บอกว่าเสียเวลา / ผิดบ่อยตรงไหน
3. Solution (1.5 min)
- แสดง architecture (C4)
- explain spec กับ non-goals
4. Live demo (1.5 min)
- User ใช้จริงต่อหน้า
- ใส่ข้อมูลจริง · เห็นผลลัพธ์จริง
5. Outcome (30 sec)
- User ใช้ไปกี่ครั้งแล้ว
- เปลี่ยน workflow เขายังไง
6. Reflection (30 sec)
- "ถ้าได้ทำใหม่ จะเปลี่ยน X"
🧠 Reflection — สิ่งที่ต้องเขียน
# Reflection: [ชื่อ Project]
## ที่ทำสำเร็จ
- [3-5 ข้อ]
## ที่ไม่สำเร็จ / ยังขาด
- [3-5 ข้อ]
## AI ช่วยอะไรเป็นพิเศษ
- [อะไรที่ AI ทำได้ดีกว่าที่คาด]
## AI พลาดอะไรเป็นพิเศษ
- [อะไรที่ AI ทำผิด · ฉันต้องแก้]
## ที่เรียนรู้
- [3 ข้อหลัก]
## ถ้าทำใหม่ จะเปลี่ยน
- [3 ข้อ]
## Project นี้ใช้ทักษะอะไรจาก W01-W14 บ้าง
- [list]
🎓 Portfolio Path — Final Project → Resume / LinkedIn / สัมภาษณ์
Final Project ที่ดี ≠ คะแนน 100 · Final Project ที่ดี = "ของที่ใส่ resume ได้" · ผู้รับสมัครงานจะดูสิ่งที่คุณ "ทำได้" มากกว่าเกรด
📄 4 Assets ที่ต้องทำหลัง Final Project
| Asset | เพื่อ | วิธีทำ |
|---|---|---|
| 1. README ใน GitHub | recruiter อ่านก่อนสัมภาษณ์ | ใส่ "What I learned" · screenshot · live URL · 1 GIF demo |
| 2. LinkedIn Post | showcase · networking | 1 ภาพ + 200 คำ + link repo · ใส่ #BuildInPublic #Python #AIEngineer |
| 3. Blog post / Medium | เล่า "process" — ไม่ใช่แค่ "ผลลัพธ์" | เล่า problem → user → mistakes → fix → result · 800-1500 คำ |
| 4. Resume bullet | ใส่ CV/resume | 1-2 บรรทัด · มี metric (e.g. "ลด TA work time จาก 8 ชม. → 3.5 ชม./สัปดาห์") |
📝 Resume Bullet Template — STAR Format
**Smart Lab Monitor** — Python · Flask · Streamlit · LINE bot
- (S) Situation: TA spent 8 hrs/week manually checking lab equipment
- (T) Task: Built automated PM2.5/temperature monitor with LINE alerts
- (A) Action: Designed REST API, integrated 3 external services (IQAir, LINE, Claude),
deployed to Cloud Run with monitoring + budget alerts
- (R) Result: Reduced manual check time to < 1 hr/week · used daily by 5 TAs
[GitHub link] · [Live demo URL] · [Architecture diagram link]
🎤 สัมภาษณ์ — เล่ายังไง
เมื่อ interviewer ถาม "เล่า project ที่ภาคภูมิใจ" — ใช้ STAR:
- Situation (15 sec) — user/problem · ไม่เริ่มที่ tech
- Task (15 sec) — สิ่งที่คุณรับมาทำ
- Action (60 sec) — สิ่งที่คุณ ตัดสินใจ · 2-3 key decisions
- Result (30 sec) — metric ที่วัดได้ · feedback ของ user
🎁 Bonus Path — สำหรับคนที่อยากไปต่อ
- Maintain mode — ใช้ project นี้ต่อ 1 เทอม · เพิ่ม feature ตาม user request · เขียน CHANGELOG จริง
- Open source — public repo + MIT license · รับ PR จากเพื่อน
- ขยาย user base — จาก 1 คน → 5 คน · ดูว่า scale แบบไหนจะแตก
- Add 2nd deployment target — ถ้าทำ Cloud แล้ว · เพิ่ม PWA หรือ desktop .exe
- Compete — ส่งเข้า hackathon (Microsoft Imagine Cup · NSC Thailand · Showcase Day ของคณะ)
- Internship pitch — บริษัทเทคโนโลยีรับ portfolio · ใช้ Final Project เป็นข้อพิสูจน์
ข้อผิดที่พบบ่อย
backlog.md · อย่าทำตอน build · ทำหลัง MVP ผ่าน
AI_USAGE.md
ส่งงาน Final Project
📦 Repository ครบ checklist
- 📁 GitHub repo public · live URL · "fresh clone" test ผ่าน
- 📄 spec.md + Spec Scorecard score ≥ 75%
- 📄 diagrams.md — C4 + sequence + ER (Mermaid)
- 📄 docs/adr/*.md — ≥ 3 Architecture Decision Records
- 📄 AI_USAGE.md — disclosure ตาม template
- 📄 CHANGELOG.md — v1.0.0 + ทุกการแก้
- 📄 reflection.md — สิ่งที่เรียนรู้
- 📄 RISKS.md — risk register + plan B
- 📄 PRIVACY.md — ถ้ามีข้อมูล user
📊 Evidence ครบ checklist
- 📷 Screenshot user ใช้ "จริง" 3 ครั้ง (ไม่ใช่ตัวเอง)
- 📷 Screenshot Sentry dashboard + UptimeRobot uptime
- 📷 Screenshot budget alert ของทุก service
- 📷 Screenshot mobile view (test บนมือถือจริง)
- 📷 Screenshot CI/CD passing (GitHub Actions green badge)
- 🎤 5-min demo video หรือ live · user ใช้สำเร็จต่อหน้า
- 📊 User feedback log — 3 คนทดสอบ + comments
🎓 Portfolio (Bonus +5 pts)
- 📝 LinkedIn post · blog post · resume bullet
- 🌟 GitHub repo มี ≥ 5 stars (ขอเพื่อนช่วย)
- 📺 Demo video บน YouTube · เปิด public
🌟 หลังจาก W15
จบคู่มือนี้ — คุณ ไม่ใช่ programmer มืออาชีพ · แต่คุณมี "workflow" ที่ programmer มืออาชีพใช้: เห็นปัญหา → spec → AI build → test → deploy → maintain
ปีต่อไปเรียนวิชาอื่น — เอา workflow นี้ไปใช้ · ค่าของคุณ ไม่ใช่ "เขียน Python ได้" · ค่าของคุณคือ "นำ AI ไปทำของจริงที่ใช้ได้"
15 สัปดาห์นี้คือการ "ลับขวาน" · ทั้งชีวิตวิศวกรของคุณคือการ "ตัดต้นไม้"