Skip to content

16.12 Success criteria + rollback plan

บทสุดท้ายของ Volume 16 สรุป success criteria ระดับ Wave และระดับ modernization ทั้งหมด พร้อม rollback plan

Success criteria ระดับ Wave

Wave 0 · Stop-the-bleed

KPIเป้าหมาย
Critical debt13 → ≤ 3 รายการ
Production downtime จาก Wave 0 task0 ครั้ง
Pen-test ใหม่ไม่พบ Critical
Uptime monitor + alertติดตั้งครบทุก domain
Runbook อัปเดตครบทุก task

ถ้าไม่ผ่าน: ห้ามเริ่ม Wave 1 จนกว่าจะผ่าน หรือปรับ scope ของ Wave 0

Wave 1 · Stabilize

KPIเป้าหมาย
Node runtimeทุก service ใช้ LTS 20+
Health endpointครบ 5/5 service
CI/CDครบ 5/5 repo
Centralized loggingครอบคลุมทุก service
Monitoring + alertingครอบคลุม
High debtลด ≥ 15 รายการ
MTTR< 1 ชั่วโมง
esm shimลบออก
_bk files0 รายการ
Dependency EOLทุกตัวเป็น version ที่ยังไม่ EOL

ถ้าไม่ผ่าน: pause Wave 2 จนกว่าจะแก้

Wave 2 · Backend extraction to Go

KPIเป้าหมาย
Bounded context ที่แยก≥ 3 ตัว
vtrc-api LOCลด ≥ 30%
Cross-schema write debtหมดไป
In-process cronแทนด้วย distributed scheduler
MTTR< 30 นาที
Service ใหม่มี metric, log, health endpoint
Contract test coverage≥ 90% ของ operation

Wave 3 · Frontend migration to Nuxt 3

KPIเป้าหมาย
Frontend บน Nuxt 3ครบ 2/2
Visual regression testครอบคลุมทุกหน้าหลัก
Lighthouse Performance≥ 80
Lighthouse Accessibility≥ 80
Bundle sizeลด ≥ 30%
React/AntD v3 ใน codebaseไม่มี

Success criteria ระดับ modernization ทั้งหมด

ทางเทคนิค

KPIปัจจุบันเป้าหมาย
Critical debt130
High debt15+≤ 3
Node runtime12 (EOL)20 LTS
Service ที่มี health0/55/5+
CI/CD2/55/5
Observabilityไม่มีครบ
Bounded context แยก0≥ 3
Frontend ทันสมัย0/22/2

ทางปฏิบัติการ

KPIปัจจุบันเป้าหมาย
Deploy frequencyหลายสัปดาห์/ครั้งทุกวัน (ถ้าต้องการ)
Lead timeหลายชั่วโมง< 30 นาที
MTTRหลายชั่วโมง< 15 นาที
Change failure rateunknown< 5%
Manual deployment stepหลายขั้น0 (push-button)

ทางธุรกิจ

KPIเป้าหมาย
Uptime≥ 99.9%
User complaint เรื่อง performanceลดลง ≥ 50%
Time-to-market ของ feature ใหม่ลดลง ≥ 30%
Security incident0

Definition of Done ระดับ modernization

Modernization "เสร็จ" เมื่อ:

  • [ ] Critical + High debt = 0
  • [ ] ทุก service บน runtime/modern framework
  • [ ] observability ครบ (log + metric + trace + alert)
  • [ ] CI/CD ครบทุก repo
  • [ ] bounded context ≥ 3 ตัวแยกออกจาก monolith
  • [ ] frontend ทั้งคู่ migrate แล้ว
  • [ ] team retrospective ยืนยันว่า sustainable

Rollback strategy ระดับ modernization

หลักการ

Modernization แต่ละขั้นต้อง rollback ได้ — ไม่มีขั้นใดที่เป็นจุด "ไม่กลับ"

Rollback ระดับ Wave

WaveRollback
Wave 0คืน git commit (ส่วนใหญ่) + คืน env var
Wave 1คืน version ก่อน upgrade + deploy image เก่า
Wave 2ปิด feature flag → traffic กลับ vtrc-api legacy
Wave 3ปิด Nginx route → traffic กลับ React app

Rollback playbook template

สำหรับทุกการเปลี่ยนแปลงที่ deploy:

markdown
## Rollback Plan: [task name]

### Trigger
- error rate > 1% ภายใน 15 นาที
- complaint จากผู้ใช้ > X รายการ
- monitoring พบ anomaly

### Step
1. (ถ้ามี feature flag) ปิด flag ใน config
2. deploy version ก่อนหน้า: `docker pull <old-image>:<old-tag>`
3. restart service: `docker-compose up -d <service>`
4. ตรวจสอบ error rate, latency
5. แจ้งทีม + document incident

### Time budget
- rollback ต้องเสร็จภายใน 30 นาที
- ถ้า rollback ใช้เวลา > 30 นาที → เรียก escalation

Rollback ระดับ architecture

ถ้าทั้ง Wave ล้มเหลว (เช่น service ใหม่ไม่ stable):

  1. freeze traffic ไป service ใหม่ — ปิด feature flag
  2. ให้ legacy รับ traffic 100% อีกครั้ง
  3. เก็บ service ใหม่ไว้ (ไม่ delete) — debug แล้วลองอีกครั้ง
  4. decommission decision — ถ้ามากกว่า 2 เดือนแล้วยังไม่ stable → ลบทิ้ง ทำ context อื่นก่อน

Decision gate หลังแต่ละ Wave

หลัง Wave เสร็จ ประชุม stakeholder เพื่อตัดสินใจ:

คำถามถ้า "ใช่"ถ้า "ไม่"
KPI ผ่านเกณฑ์?ไป Wave ถัดไปpause และแก้
Risk score รวมลดลง?ไป Wave ถัดไปreview mitigation
ทีมพร้อม?ไป Wave ถัดไปpause + training
งบเพียงพอ?ไป Wave ถัดไปขอเพิ่ม หรือลด scope
ROI ยังคุ้ม?ไป Wave ถัดไปre-evaluate

"Stop modernization" trigger

บางกรณีควรหยุด modernization ก่อนเสร็จ:

TriggerAction
Security incident ที่ต้อง all-handpause modernization, focus incident
Business pivotre-evaluate scope
ทีมหมดแรง (happiness < 6/10)pause 1-2 sprint
งบบาน > 150%re-evaluate กับผู้บริหาร
ROI ไม่คุ้มแล้วstop, accept partial

Post-modernization

หลัง Wave 3 เสร็จ:

1. Retrospective ระดับองค์กร

  • สิ่งที่ทำได้ดี
  • สิ่งที่ผิดพลาด
  • lesson learned สำหรับโครงการถัดไป

2. อัปเดตเอกสาร

  • ทุก Volume ใน manual นี้ → อัปเดตให้ตรงสถานะใหม่
  • ลบ debt ที่แก้แล้วจาก Volume 14
  • เพิ่ม architecture ใหม่ใน Volume 2

3. สร้าง "modernization debt" register ใหม่

modernization เองก็สร้าง debt ใหม่ — track ไว้ใน Volume 14 (เพิ่ม section "debt ที่เกิดหลัง modernization")

4. ตั้ง team ถาวรสำหรับ platform

  • SRE team
  • Platform team (ดูแล shared library, contract test)
  • Domain team ตาม bounded context

5. Continuous modernization

Modernization ไม่เคย "เสร็จจริง" — ต้องมีกระบวนการ:

  • ทบทวน debt register ทุกไตรมาส
  • ลด debt ต่อเนื่อง (ไม่ใช่รอ modernization ครั้งใหญ่อีก)
  • อัปเดต dependency ทุกเดือน
  • ทำ penetration test ปีละครั้ง

สรุป Volume 16

Volume นี้แปลง debt register (Volume 14) ให้เป็นแผนงานที่ทีมทำได้จริง

สาระสำคัญ:

  1. แบ่งเป็น 4 Wave — Wave 0 (stop-the-bleed), Wave 1 (stabilize), Wave 2 (backend extraction), Wave 3 (frontend migration)
  2. ใช้ strangler pattern — migrate ทีละส่วน, ไม่ใช่ big-bang
  3. ทุกขั้นต้อง reversible + มี rollback plan
  4. ลงทุนใน training และ observability
  5. KPI + decision gate ทุก Wave
  6. ไม่จำเป็นต้องทำครบ — Wave 0 + 1 ได้ ROI ส่วนใหญ่

ระยะเวลาและงบ:

  • ทางเลือก A (Wave 0 + 1): 4 เดือน, 3 ล้านบาท
  • ทางเลือก B (Wave 0-2): 18 เดือน, 12 ล้านบาท
  • ทางเลือก C (ครบ 4 Wave): 18-24 เดือน, 19 ล้านบาท

คำแนะนำ: เริ่มจาก Wave 0 + Wave 1 เสมอ แล้วประเมินใหม่หลังเสร็จ — อย่าล็อคแผนระยะยาวตั้งแต่ต้น


Volume 16 (Appendices) จะรวบรวม reference material, glossary, และ index