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