1. 👻 Ghost Request — API ที่ไม่มีใครเรียก
ตี 2:17 น.
Server มี request เข้ามา endpoint หนึ่ง
POST /api/paymentปัญหาคือ…
ไม่มีใครเขียน frontend ให้เรียก endpoint นี้
Developer เปิด GitHub ดูทั้ง repository
grep -r "/api/payment" .ไม่มี
ลองดู Network log — ไม่มี
ลองดู Database — มี payment ใหม่จริง
และที่น่ากลัวที่สุดคือ…
Request นี้เกิดขึ้นทุกคืนตอน 2:17
สุดท้ายพบว่าเป็น Cron Job ตัวเก่าที่ถูก deploy ไว้เมื่อหลายเดือนก่อน
แต่ไม่มีใครจำได้ว่ามันยังทำงานอยู่
👻 Lesson: ระบบที่เรา “คิดว่าไม่มีแล้ว” อาจยังมีชีวิตอยู่
ใน Production สิ่งที่น่ากลัวกว่า Bug คือ Undocumented Behavior
2. 🧟♂️ The Zombie Code — Code ที่ลบไปแล้วแต่ยังทำงาน
Developer ลบ function นี้ออก
function calculateDiscount() {
// old logic
}Deploy
ทุกอย่างดูปกติ
หนึ่งสัปดาห์ต่อมา…
ลูกค้าบางคนยังได้ Discount แบบเก่า
ทีมเปิด Code ดู
function หายไปแล้ว
ไม่มี reference
ไม่มี import
ไม่มี test
แล้วมันทำงานได้ยังไง?
สุดท้ายพบว่า Server ตัวหนึ่งไม่ได้ถูก deploy ใหม่
Server A → new code
Server B → old code
Server C → new code
Load Balancer ส่ง request ไป Server B เป็นบางครั้ง
ทำให้เกิด Bug แบบ…
“บางครั้งมันเป็น บางครั้งมันไม่เป็น”
นี่คือหนึ่งใน Bug ที่ developer กลัวที่สุด
เพราะมันทำให้เราเริ่มสงสัยตัวเองว่า
“เมื่อกี้เราเห็นอะไรนะ?”
3. 🩸 if (user) — เงื่อนไขที่ไม่มีใครกล้าแตะ
มี Code บางส่วนที่เขียนแบบนี้
if (user) {
doSomething()
}ง่ายมาก
ธรรมดามาก
จนวันหนึ่งมีคนถามว่า
“ถ้าเอา if นี้ออกได้ไหม?”
ทุกคนเงียบ
เพราะไม่มีใครรู้ว่าทำไมมันต้องมี
Developer คนใหม่ลองเอาออก
Deploy
Production ล่ม
😐
ใส่กลับ
Deploy
ทุกอย่างกลับมาปกติ
จึงเกิดกฎใหม่ในทีมว่า
“ห้ามแตะ if นี้”
ไม่มีใครรู้ว่ามันแก้ปัญหาอะไร
ไม่มี comment
ไม่มี issue
ไม่มี documentation
มีเพียงความทรงจำของ Senior Developer ที่ลาออกไปเมื่อ 3 ปีก่อน
นี่คือสิ่งที่เรียกว่า
Haunted Code
Code ที่ไม่มีใครเข้าใจ แต่ทุกคนกลัวที่จะลบ
4. 🕯️ console.log() ที่ช่วยชีวิต Production
เวลา Debug เรามักทำแบบนี้
console.log("HERE 1")
console.log("HERE 2")
console.log(user)แล้วเจอว่า Bug อยู่ตรงไหน
จากนั้นก็ลบ console.log() ออก
Bug กลับมา
😐
ใส่กลับ
Bug หาย
ปรากฏว่า console.log() เปลี่ยน timing ของระบบ
โดยเฉพาะระบบที่มี
Race condition
Async operation
Concurrent requests
Event loop
มันอาจทำให้ execution timing เปลี่ยน
จน Bug หายไป
นี่คือ Heisenbug
Bug ที่เมื่อเรา “พยายามสังเกตมัน”
มันกลับเปลี่ยนพฤติกรรม
เหมือนผีที่รู้ว่าเรากำลังมองมันอยู่
5. 🪦 วันที่ Date กลายเป็นศัตรู
new Date("2026-08-10")Developer คิดว่า
“ก็วันที่ 10 สิงหาคมสิ”
แต่ระบบอีกเครื่องกลับมองเป็นอีก timezone
แล้ว payment deadline ที่ควรเป็น
10 Aug 2026 00:00กลายเป็น
09 Aug 2026 17:00เพราะ Server อยู่คนละ timezone
จากนั้นก็เกิด Bug สุดคลาสสิก:
“ทำไมวันนี้ระบบบอกว่า Deadline ผ่านแล้ว?”
Developer เปิด Database
ทุกอย่างถูกต้อง
เปิด Frontend
ถูกต้อง
เปิด Backend
ถูกต้อง
แต่…
คนละ Timezone
👻
เรื่องนี้สอนเราว่า
วันที่และเวลาใน Software ไม่เคยเป็นเรื่องง่ายอย่างที่มันดูเหมือน
6. 🔥 Production Bug ที่เกิดเฉพาะวันศุกร์
มี Bug หนึ่งเกิดทุกวันศุกร์
แต่ไม่เกิดวันอื่น
ทีมลองทุกอย่าง
Database
API
Cache
Frontend
Backend
Network
ไม่มีอะไรผิด
จนค้นพบว่า Code มี logic แบบนี้:
if (day === 5) {
// special behavior
}ใครเขียน?
ไม่มีใครรู้
ทำไมต้องวันศุกร์?
ไม่มีใครรู้
สุดท้ายเจอ comment เก่า:
// TODO: remove after campaignCampaign จบไปแล้ว 2 ปี
แต่ Code ยังอยู่
👻
Technical Debt ไม่ได้หายไปเอง
มันแค่รอวันที่จะกลับมาหลอกเรา
☠️ และผีที่น่ากลัวที่สุด…
ไม่ใช่ Bug
ไม่ใช่ Production
ไม่ใช่ Database
แต่คือประโยคนี้:
“อย่าแก้เลย เดี๋ยวของพัง”
เมื่อ Developer ในทีมเริ่มกลัว Code ของตัวเอง
แปลว่า Codebase นั้นอาจไม่ได้มีแค่ Technical Debt
แต่มันมี Technical Fear
เกิดขึ้นเมื่อเราไม่รู้ว่า Code ทำงานอย่างไร แต่ยังต้องรักษามันไว้
ดังนั้นครั้งต่อไปที่เจอ Code แบบนี้:
// DO NOT TOUCH
// I DON'T KNOW WHY THIS WORKSอย่าเพิ่งลบ
แต่ก็อย่าปล่อยให้มันกลายเป็นผี
เขียน Test
เขียน Comment
หาคนที่รู้
Refactor เมื่อมีโอกาส
เพราะ Code ที่ไม่มีใครเข้าใจ…
วันนี้อาจเป็นแค่ Legacy Code
แต่พรุ่งนี้
มันอาจกลายเป็น ผีประจำ Production 👻


