บทที่ 21 · Part 5 — Decisions & Delivery

Cheat Sheet & Checklists

สรุป 1 หน้า, review checklist ต่อ layer, แผนฝึก 12 สัปดาห์, reading list และ glossary

บทนี้ไม่มีเนื้อหาใหม่ — มันคือหน้าที่คุณเปิดค้างไว้ตอนออกแบบ และคือ checklist ที่คุณรันกับ design ของตัวเองก่อนที่คนอื่นจะรันให้

วิธีใช้บทนี้

  • Cheat sheet — จำให้ได้ หรืออย่างน้อยรู้ว่าจะเปิดหาที่ไหน
  • Review checklist — รันกับ design ของตัวเองก่อนส่งรีวิว
  • Fintech checklist — รันเพิ่มถ้าระบบแตะเงินจริง
  • แผน 12 สัปดาห์ — ถ้าจะฝึกอย่างจริงจัง

A · Cheat sheet 1 หน้า

CADENCE
  Clarify · Assess scale · Define contracts · Entities/data ·
  Nail architecture · Critical deep dives · Examine failures

MENTAL MATH
  1 วัน ≈ 86,400 s (ใช้ 100k)       1 M/วัน ≈ 12/s
  100 M/วัน ≈ 1,200/s               peak = average × 5-30 (ต้องรู้ว่าเท่าไหร่)
  1 M row × 500 B = 500 MB          index บวก 1.5-3×

LATENCY
  memory 100 ns · SSD read 100 µs · same-AZ RTT 0.5 ms
  BKK↔SG ~30 ms · BKK↔US ~240 ms · mobile TTFB 50-150 ms

AVAILABILITY
  99.9% = 43 นาที/เดือน      99.99% = 4.4 นาที/เดือน
  dependency แบบอนุกรม *คูณกัน*: 0.999^5 = 99.5%
  L = λW (Little's Law): concurrency = อัตรา × latency

RESILIENCE CHECKLIST (ทุกการเรียกข้ามเครื่อง)
  timeout · retry ที่มี backoff+jitter+budget · idempotency key ·
  circuit breaker · bulkhead · queue ที่มีขอบเขต · fallback ที่นิยามไว้ ·
  metric + alert · trace propagate · deadline propagate

DATA RULES
  เงิน = integer หน่วยย่อย + currency ห้าม float
  ledger = append-only double-entry, balance derive มา
  atomic write เดียว + outbox — ห้าม dual write
  at-least-once + consumer ที่ idempotent = effectively once
  normalize ความจริง, denormalize read model
  เลือก partition key ก่อนที่จะต้องใช้
  ตอน write ให้ delete cache key ห้าม update
  keyset pagination ห้าม OFFSET

เมื่อไม่แน่ใจ
  component น้อยลง · Postgres ตัวเดียว · async ตรงที่อนุญาต ·
  fail closed เรื่องเงิน · ประกาศสมมติฐาน · เขียน ADR

B · Design review checklist

รันกับ design ของตัวเองก่อน

ทุกข้อที่ตอบไม่ได้คือคำถามที่ reviewer จะถาม — ตอบให้ได้ก่อนเข้าห้อง

Requirement และ scope

  • Non-goal เขียนไว้ไหม — และ ลบ component ไหนได้ไหมโดยไม่ละเมิด requirement
  • Quality attribute เป็นตัวเลข ไม่ใช่คำคุณศัพท์ ทุกข้อไหม
  • ทุกกล่องใน diagram ไล่กลับไปหา requirement ได้ไหม

Data

  • มี access pattern table ไหม และ ทุก index serve pattern ที่อยู่ในลิสต์ไหม
  • มี dual write ที่ไหนไหม — ถ้ามี ใช้ outbox หรือ CDC แทนได้ไหม
  • Consumer ทุกตัว idempotent ไหม dedupe key คืออะไร
  • Partition/shard key เขียนไว้ไหม แม้จะยังไม่ใช้
  • Read-your-writes — มีเส้นทาง read-after-write ไหนที่ไปที่ replica ไหม
  • Pagination ใช้ keyset ไม่ใช่ OFFSET ไหม
  • Invariant สำคัญอยู่ใน database constraint ไหม

Reliability

  • Availability แบบอนุกรมของ critical path เท่าไหร่ และ dependency ตัวไหนถอดออกจาก critical path ได้
  • ทุกการเรียกข้ามเครื่อง: timeout, retry policy, idempotency, circuit breaker, fallback
  • เกิดอะไรที่ 10× โหลด · ที่ 0 โหลด (cache เย็น, cold start) · ระหว่าง deploy
  • Queue, pool, buffer มีขอบเขตทุกตัวไหม
  • Failure table ครบ พร้อมสัญญาณตรวจจับทุกแถว ไหม
  • มีแถว "คน" ใน failure table ไหม

Observability และ operations

  • SLO นิยามต่อ user journey พร้อม burn-rate alert ไหม
  • มี alert ที่ business outcome และที่ สิ่งที่ควรเกิดแล้วไม่เกิด ไหม
  • Runbook สำหรับ alert 3 อันดับแรกไหม · kill switch สำหรับเส้นทางเสี่ยงไหม
  • Rollout: flag, ขั้นการ ramp, metric ที่เป็น gate, เงื่อนไข rollback, และใครอนุมัติการ release ขึ้น production
  • Backup: มีอยู่จริง, แยกจาก credential ของ production, และ ทดสอบ restore แล้วพร้อมเวลาที่วัดได้

Privacy และ security

  • Retention และการลบ: ระยะเวลาเท่าไหร่, ใครยืนยัน, และเป็น automated ไหม
  • PII: minimize แล้ว, mask ใน log, encrypted, มี audit การเข้าถึงไหม
  • มี secret ในโค้ดหรือใน config ที่อยู่ใน git ไหม
  • Trust boundary อยู่ใน diagram ไหม

การตัดสินใจ

  • เขียน ADR สำหรับทุกการตัดสินใจที่เป็น one-way door ไหม
  • ทุกตัวเลขในเอกสารกำกับว่า verified / estimated / assumed ไหม
  • รายการ การตัดสินใจที่ต้องการจากคนอื่น พร้อมชื่อและวันที่ ไหม

C · Fintech-specific checklist

รันเพิ่มถ้าระบบแตะเงินจริง

ทุกข้อที่ตอบว่า "ยัง" คือความเสี่ยงที่ต้องยกขึ้นมาคุย ไม่ใช่ข้อที่ปล่อยผ่านได้

เงินและ ledger

  • เงินเป็น integer พร้อม currency ทุกที่ รวมถึงในรายงานและใน event ไหม
  • Ledger append-only, double-entry, และ monitor zero-sum ต่อเนื่อง ไหม
  • มี monitor debit รวม = credit รวมทั้งระบบ ต่อสกุลเงินรันอยู่ไหม
  • ค่าธรรมเนียมมี fee account — เงินไม่หายไปในค่าธรรมเนียมไหน
  • Snapshot ของยอดมี job คำนวณใหม่จากศูนย์แล้วเทียบ ไหม

Idempotency และสถานะ

  • Idempotency key required บนทุก endpoint ที่เปลี่ยนแปลงเงิน และบังคับด้วย unique constraint ไหม
  • เก็บ response ที่เคยส่งไป เพื่อเล่นซ้ำได้ไหม (ไม่ใช่เก็บแค่ "done")
  • มี request fingerprint เพื่อตอบ 409 เมื่อ key เดิม body ต่างไหม
  • มี สถานะ UNKNOWN ที่ชัดเจน ไหม และ ไม่มีอะไรออกจากสถานะนั้นด้วยการเดาหรือด้วย timer ใช่ไหม
  • ข้อความที่ลูกค้าเห็นเมื่อผลลัพธ์ไม่ทราบ พูดว่า "กำลังดำเนินการ" ไม่ใช่ "ล้มเหลว" ใช่ไหม

Reconciliation และ control

  • Reconciliation ออกแบบเข้าไปแล้ว: source, cutoff, matching pass, การจัดหมวด break, เจ้าของ, SLA, alert
  • มี alert ที่ "ไม่ได้รับไฟล์ settlement" และ "งาน reconciliation ไม่จบ" ไหม
  • มี job อัตโนมัติตัวไหนเปลี่ยนยอดเงินลูกค้าได้โดยไม่มีคนอนุมัติไหม — ต้องไม่มี
  • Fail-open กับ fail-closed ถูกตัดสินโดย Risk สำหรับทุก control (fraud, limit, sanctions screening) และมีเอกสารไหม
  • Limit (ต่อรายการ, ต่อวัน, velocity) ถูกบังคับที่จุดที่ request พร้อมกันข้ามไม่ได้ (แถวที่ materialize conflict หรือ SERIALIZABLE) ไหม

ข้อมูลและการเข้าถึง

  • ข้อมูลบัตร: ไม่เก็บ PAN เลย และ ขอบเขต scope วาดอยู่ใน diagram ไหม
  • Audit trail ครบว่าใครทำอะไรกับเงินของใคร, immutable, เก็บตามนโยบาย ไหม
  • Production access, การแก้ข้อมูล และ operation ที่ destructive อยู่หลัง least privilege และการอนุมัติ 4 ตา ไหม
  • ข้อมูล production ไม่ถูก copy ลง dev/test ใช่ไหม

Dependency ภายนอก

  • มี 2 provider สำหรับทุก dependency ภายนอกที่ critical หรือมี เอกสารว่ายอมรับความเสี่ยงของการมีรายเดียว ไหม
  • รู้ maintenance window และ cutoff time ของแต่ละ rail ไหม
  • Subscribe status page ของ provider แบบ programmatic ไหม (ไม่ใช่ต้องจำไปเปิดดู)
  • มี rail_attempts หรือเทียบเท่าที่บันทึกทุกการเรียกภายนอกเป็นข้อมูล ไหม

D · แผนฝึก 12 สัปดาห์

สัปดาห์โฟกัสทำสิ่งนี้
1–2FoundationsDDIA บทที่ 1–4 · Lab บทที่ 2 · จำตัวเลข latency และ availability · ประมาณ scale ของ 3 ระบบที่คุณดูแลอยู่
3–4Building blocksLab บทที่ 6 ให้ครบ · อ่าน Amazon Builders' Library 3 เรื่อง (timeout/retry, load shedding, health check)
5–6ReliabilityGoogle SRE Book บทที่ 21–22 และบท SLO · Lab บทที่ 13 · ตั้ง SLO จริง 1 ตัวพร้อม burn-rate alert ที่ทำงาน
7–8DataDDIA บทที่ 5–9 · Lab ledger ในบทที่ 16 ให้ครบทั้ง 7 ขั้น · อ่านบทความ sharding ของ Notion และ Figma
9–10Trade-offsLab บทที่ 17 · เขียน ADR 3 ฉบับสำหรับการตัดสินใจที่เกิดขึ้นแล้วในระบบของคุณ — คุณจะค้นพบว่าไม่มีใครจำได้ว่าทำไม
11ScenariosLab บทที่ 18 · ออกแบบ 2 scenario แบบเย็นและจับเวลา แล้วเทียบกับบทที่ 18–19
12CommunicationLab และ capstone ในบทที่ 20 · นำเสนอต่อคณะจริงและเก็บคำวิจารณ์

นิสัยต่อเนื่องที่มีค่ามากกว่า 12 สัปดาห์นั้น

  • อ่าน postmortem สาธารณะสัปดาห์ละ 1 ฉบับ แล้วเขียนว่า alert ตัวไหนที่คุณยังไม่มี
  • เก็บไฟล์ส่วนตัวของตัวเลขจากระบบของคุณเอง
  • อาสาไปรีวิว design ของทีมอื่น
  • หลังทุก incident ที่คุณแตะ ให้เพิ่ม 1 แถวใน failure table ที่ไหนสักที่

E · Reading list

หนังสือ

  • Designing Data-Intensive Applications — Kleppmann · หนังสือที่จำเป็นเล่มเดียว อ่าน 2 รอบ
  • Site Reliability Engineering + The SRE Workbook — Google, ฟรี
  • Patterns of Distributed Systems — Joshi/Fowler, ฟรี · กลไก: write-ahead log, leader election, quorum, lease, HLC
  • Fundamentals of Software Architecture — Richards & Ford · คำศัพท์เรื่อง trade-off และการมองแบบ architecture characteristics ที่ใช้ในบทที่ 17
  • Microservices Patterns — Richardson · saga, outbox, API composition, CQRS อย่างเข้มงวด

Essay ฟรี (คุ้มค่าต่อชั่วโมงสูงสุด)

Paper ที่ควรอ่านให้จบ

  • The Tail at Scale — Dean & Barroso
  • Dynamo — ต้นกำเนิดของ consistent hashing + quorum + eventual consistency ในทางปฏิบัติ
  • Scaling Memcache at Facebook
  • Spanner — global strong consistency มีราคาเท่าไหร่จริงๆ
  • Jepsen: consistency models — บวกการวิเคราะห์ Jepsen ของฐานข้อมูลที่คุณใช้

Primary source สำหรับ fintech และบริบทไทย

อ่านตัวเอกสารจริง อย่าอ่านแต่บทสรุป

F · Glossary

คำความหมายแบบภาษาคน
Backpressureบอก producer ให้ช้าลง แทนที่จะเข้าคิวเงียบๆ ไปเรื่อยๆ
Blast radiusของพังมากแค่ไหนเมื่อของชิ้นหนึ่งพัง
Bulkheadแยก resource pool เพื่อให้ความล้มเหลวจุดเดียวกินทุกอย่างไม่ได้
CDCChange data capture — เปลี่ยนการเปลี่ยนแปลงในฐานข้อมูลให้เป็น stream ของ event
Cell / podstack ที่ครบและแยกออกมา serve ผู้ใช้ชุดหนึ่ง เพื่อจำกัด blast radius
Error budgetปริมาณความล้มเหลวที่ SLO อนุญาต ถือเป็นทรัพยากรที่คุณใช้ได้
Fan-outevent หนึ่งทำให้เกิด write หรือการเรียกจำนวนมาก
Fencing tokenเลขที่ monotonic ซึ่งพิสูจน์ว่าคุณยังถือ lock อยู่ เพื่อให้ผู้ถือที่ล้าสมัยถูกปฏิเสธ
Goodputงานที่มีประโยชน์ต่อวินาที ต่างจาก throughput ที่นับงานที่เสียเปล่าด้วย
Gray failureพังแล้วแต่ยังผ่าน health check — ชนิดที่อันตราย
Hot key / hot shardkey หรือ partition เดียวที่ได้รับ traffic ไม่ได้สัดส่วน
Idempotentทำ 2 ครั้งได้ผลเหมือนทำครั้งเดียว
Keyset paginationไล่หน้าด้วย "หลัง key นี้" แทนที่จะใช้ OFFSET
Linearizableทำตัวเหมือนมีข้อมูลสำเนาเดียวและ operation เกิดขึ้นตามลำดับเวลาจริง
Metastable failureยังพังอยู่หลัง trigger หายไปแล้ว เพราะ retry และ cache ที่เย็นเลี้ยงมันไว้
Minor unitsหน่วยเงินที่เล็กที่สุด (สตางค์) — วิธีที่ต้องเก็บเงิน
Outboxตารางที่เขียนใน transaction เดียวกับการเปลี่ยนแปลงทางธุรกิจ แล้วถูก relay เป็น event
PACELCPartition → A หรือ C; Else → Latency หรือ Consistency · ส่วนขยายเชิงปฏิบัติของ CAP
Read-your-writesผู้ใช้เห็นการเปลี่ยนแปลงของตัวเองเสมอ แม้คนอื่นจะช้า
RPO / RTOเสียข้อมูลได้เท่าไหร่ / ล่มได้นานเท่าไหร่
Sagabusiness transaction หลายขั้นข้าม service พร้อม compensating action
Single-flightรวม request ที่เหมือนกันซึ่งเกิดพร้อมกันให้เป็นหนึ่ง แล้วแบ่งผลลัพธ์กัน
SLI / SLO / SLAตัววัด / เป้าภายในของคุณ / คำสัญญาตามสัญญา
Strangler figแทนที่ระบบทีละส่วนขณะที่ทั้ง 2รันอยู่ แทนการเขียนใหม่แบบ big bang
Tail latencyp99 ขึ้นไป — ประสบการณ์ของผู้ใช้ที่โชคร้ายที่สุด และเป็นตัวเลขที่สำคัญ
Write skewtransaction 2 ตัวต่างเช็คกฎ ต่างผ่าน แต่รวมกันทำลายกฎนั้น

ข้อจำกัดของคอร์สนี้ — อ่านก่อนนำไปใช้

  • ตัวเลขที่กำกับว่า illustrative เป็นตัวเลขเพื่อสอน ไม่ใช่ผลวัด — ยืนยันกับ telemetry ของคุณเองก่อนใช้ในการตัดสินใจ
  • คำกล่าวเรื่อง compliance, retention และระดับการยอมรับความเสี่ยงในคอร์สนี้ เป็น placeholder สำหรับนโยบายที่องค์กรของคุณยืนยันเอง — การตัดสินเหล่านั้นเป็นของเจ้าของที่รับผิดชอบด้าน legal, compliance และ risk และควรบันทึกไว้ใน design document ของคุณ พร้อมแหล่งที่มาและวันที่
  • โค้ดตัวอย่างเขียนเพื่อสอนแนวคิด จึงตัดรายละเอียดหลายอย่างออก ไม่ควรคัดลอกไป production โดยไม่ review

[!NOTE] จบคอร์ส ถ้าคุณทำได้ 5 อย่างนี้ คุณกำลังทำงานนี้อยู่จริง: ทุก component ไล่กลับไปหา requirement ได้ · ทุกตัวเลขกำกับว่า verified / estimated / assumed · failure table มีสัญญาณตรวจจับทุกแถว · แผน migration ย้อนกลับได้ทุกขั้น · และ คุณขอการตัดสินใจที่ถูกต้อง จากคนที่ถูกต้อง