บันทึกการพัฒนา: ความซื่อสัตย์ของระบบ (System Honesty)

สร้างระบบที่พูดความจริง

ระบบจะดีได้เท่ากับสัญญาณที่มันส่งออกมาเท่านั้น หากคิวรี (query) ของคุณซ่อนความสิ้นเปลือง หากการตรวจสอบสถานะ (health checks) ของคุณโกหก หรือหากเครื่องมือของคุณทำงานซ้ำซ้อน แสดงว่าระบบของคุณขาดความซื่อสัตย์

วันนี้ผมใช้เวลาไปกับการทำงานใน 4 หัวข้อทางเทคนิคที่แตกต่างกัน ซึ่งแต่ละหัวข้อล้วนมีธีมเดียวกัน นั่นคือ การทำให้ระบบมีความซื่อสัตย์

  1. ประสิทธิภาพของฐานข้อมูล (Database Performance) เลิกดึงข้อมูลที่คุณไม่ได้ใช้งาน
  • ใช้ N+1 detector ในสภาพแวดล้อมการพัฒนาของคุณ มันจะเปลี่ยนการทำ lazy-load ที่ซ่อนอยู่ให้กลายเป็นรายการงานที่ชัดเจน
  • ลบ eager loads ที่ไม่ได้ใช้งานออก หาก view ของคุณไม่ได้ใช้คอลัมน์ไหน ก็อย่าดึงมันมา
  • ทำ memoize ค่าคงที่ต่อหนึ่งคำขอ (request) อย่าคำนวณค่าเดิมซ้ำหลายครั้งในรอบเดียว
  • รวมกลุ่มคิวรีของแดชบอร์ด แทนที่จะเรียกใช้ count เล็กๆ 20 ครั้ง ให้เปลี่ยนมาใช้การ query แบบจัดกลุ่มเพียงครั้งเดียวแทน
  1. การตรวจสอบสถานะที่แท้จริง (Real Health Checks) การตรวจสอบที่ทำเพียงแค่ดูว่ามี config อยู่หรือไม่ ไม่ใช่การตรวจสอบสถานะ (health check) แต่มันคือการตรวจสอบการตั้งค่า (config check)
  • การตรวจสอบสถานะที่แท้จริงต้องพิสูจน์ความสามารถในการเข้าถึงได้ (reachability)
  • เปิด socket ไปยัง host และ port เป้าหมาย
  • ใช้ contract หรือ interface เพื่อสลับระหว่างการตรวจสอบแบบ TCP, HTTP หรือ TLS probes
  • รันแต่ละ probe บนการเชื่อมต่อของตัวเอง บริการที่ทำงานช้าเพียงตัวเดียวไม่ควรทำให้เครื่องมือตรวจสอบทั้งหมดของคุณหยุดชะงัก
  1. เครื่องมือ AI ที่ปลอดภัยยิ่งขึ้น (MCP) เมื่อคุณอนุญาตให้ AI agent เข้าถึงระบบของคุณ คุณต้องสันนิษฐานไว้ก่อนว่ามันจะทำผิดพลาด
  • ใช้ idempotency keys หาก agent พยายามส่งคำขอซ้ำ เซิร์ฟเวอร์ควรส่งผลลัพธ์เดิมกลับมาแทนที่จะสร้างข้อมูลซ้ำซ้อน
  • ลบข้อมูลส่วนบุคคล (scrub personal data) ก่อนส่งออกไป ให้ถือว่าเส้นทางของ response คือขอบเขตสาธารณะ (public boundary)
  • ใช้ error codes ที่มีการระบุประเภท (typed) อย่าส่งเป็น raw strings เพราะ agent จำเป็นต้องใช้รหัสที่มีโครงสร้าง เช่น "not_found" เพื่อดำเนินการได้อย่างถูกต้อง
  1. การยืนยันตัวตนและการรีเซ็ตรหัสผ่าน (Identity and Password Resets) ลำดับมีความสำคัญเมื่อคุณต้องจัดการกับหลายระบบพร้อมกัน
  • หากการรีเซ็ตรหัสผ่านต้องส่งผลไปยังหลาย directory ให้เลือกแหล่งข้อมูลที่ถูกต้องเพียงแหล่งเดียว (source of truth)
  • เขียนข้อมูลลงใน directory ที่เป็นแหล่งอ้างอิงหลัก (authoritative directory) ก่อน
  • บันทึกลำดับขั้นตอนไว้ "มันใช้งานได้ตอนที่ผมลอง" ไม่ใช่การรับประกันความสำเร็จเมื่อเกิดความล้มเหลวขึ้นจริง

เป้าหมายไม่ใช่การสร้างฟีเจอร์ที่ดูหวือหวา แต่เป้าหมายคือการสร้างระบบที่ยังคงความน่าเชื่อถือได้แม้ในยามที่คุณไม่ได้เฝ้าดูมันอยู่

แหล่งที่มา: https://dev.to/nasrulhazim/dev-log-2026-06-23-query-cleanups-real-health-checks-safer-mcp-tools-and-password-reset-12d0