ฮอตฟิกซ์ (hotfix) คือการแก้ไขข้อบกพร่องร้ายแรงในระบบผลิตจริงอย่างเร่งด่วน ซึ่งดำเนินการนอกรอบการเผยแพร่ปกติ ต่างจากการเผยแพร่ตามแผน hotfix จะข้ามขั้นตอน QA และการทดสอบบางส่วนเพื่อส่งการแก้ไขถึงผู้ใช้ในเวลาที่สั้นที่สุด ตามคู่มือขั้นตอนการทำงาน Git ของ Atlassian สาขา hotfix ถูกสร้างขึ้นจากแท็กการเผยแพร่ล่าสุด และหลังจากนำไปใช้แล้วจะถูกผสานกลับเข้าไปใน main และ develop กระบวนการ hotfix รวมถึงชุดการตรวจสอบขั้นต่ำที่เพียงพอต่อความมั่นใจว่าไม่มีการถดถอย
ประเด็นสำคัญ
ฮอตฟิกซ์ (การแก้ไขด่วน) คือแพทช์สำหรับเวอร์ชันระบบผลิตของแอปพลิเคชันที่เผยแพร่นอกคิวเพื่อแก้ไขปัญหาร้ายแรง ฮอตฟิกซ์ถูกส่งถึงผู้ใช้ในเวลาไม่กี่ชั่วโมง ไม่ใช่ไม่กี่วัน และมีไว้สำหรับสถานการณ์ที่แอปพลิเคชันไม่พร้อมใช้งาน สูญเสียข้อมูล หรือกระทบต่อความปลอดภัยของผู้ใช้เท่านั้น
สถานการณ์ทั่วไปสำหรับ hotfix: การขัดข้องเมื่อเริ่มต้นบนอุปกรณ์บางชนิด (การถดถอยหลังการเผยแพร่ล่าสุด) การรั่วไหลของข้อมูลส่วนบุคคลเนื่องจากการอนุญาตที่ไม่ถูกต้อง การรวมระบบการชำระเงินที่เสียหาย (สูญเสียรายได้) การละเมิดข้อกำหนด GDPR/CCPA สถานการณ์ทั้งหมดนี้มีความรุนแรงระดับ P0 หรือ P1 ในการจำแนกประเภทเหตุการณ์ งานที่วางแผนไว้ — การปรับให้เหมาะสม การปรับโครงสร้างใหม่ หน้าจอใหม่ — จะไม่ดำเนินการผ่าน hotfix
กฎสำคัญ: ฮอตฟิกซ์มีการเปลี่ยนแปลงในจำนวนน้อยที่สุด (1–2 ไฟล์ 10–20 บรรทัดของโค้ด) ยิ่ง diff เล็กเท่าไร ความเสี่ยงในการนำเข้าข้อบกพร่องใหม่ก็ยิ่งลดลงเท่านั้น หากการแก้ไขปัญหาต้องเปลี่ยนสถาปัตยกรรมหรือเพิ่มโมดูลใหม่ — นั่นไม่ใช่ hotfix แต่เป็นการเผยแพร่ฉุกเฉินที่ต้องมีการตรวจสอบโค้ดและ QA อย่างสมบูรณ์
ความแตกต่างหลักระหว่าง hotfix และการเผยแพร่ตามแผนคือความเร็ว ขอบเขตของการเปลี่ยนแปลง และระดับการทดสอบ การเผยแพร่ตามแผนอาจรวมถึงฟีเจอร์มากมาย ผ่านวงจร QA ที่สมบูรณ์ (การทดสอบการถดถอย + การรวมระบบ + UI) และใช้เวลา 1–2 สัปดาห์ตั้งแต่การหยุดโค้ดจนถึงการปรับใช้ ฮอตฟิกซ์ รวมถึงการแก้ไขหนึ่งหรือสองรายการ ผ่านการตรวจสอบที่เร่งขึ้น (การอนุมัติ 2 รายการแทน 3 รายการ) และการทดสอบแบบ smoke ขั้นต่ำ
จากมุมมองของกระบวนการ Git ฮอตฟิกซ์ถูกสร้างขึ้นจากแท็กการเผยแพร่ ไม่ใช่จากสาขา develop ซึ่งทำให้แน่ใจว่ามีเพียงการเปลี่ยนแปลงที่จำเป็นในการแก้ไขปัญหาเท่านั้นที่รวมอยู่ใน hotfix โดยไม่ดึงฟีเจอร์ที่ยังไม่เสร็จจาก develop เข้ามาโดยไม่ตั้งใจ หลังการปรับใช้ hotfix จะถูกผสานกลับเข้าไปใน main และ develop (ผ่าน cherry-pick หรือ merge)
| เกณฑ์ | การเผยแพร่ตามแผน | ฮอตฟิกซ์ |
|---|---|---|
| ขอบเขต | ฟีเจอร์และการแก้ไขมากมาย | 1–2 การแก้ไขร้ายแรง |
| สาขา | สาขา release จาก develop | สาขา hotfix จากแท็ก release |
| การตรวจสอบโค้ด | 3 การอนุมัติ กระบวนการเต็ม | 2 การอนุมัติ fast-track |
| QA | ชุดทดสอบการถดถอยเต็ม | ทดสอบ smoke + พื้นที่ที่ได้รับผลกระทบ |
| เวลาปรับใช้ | 1–4 สัปดาห์ | 1–24 ชั่วโมง |
| Rollback | ผ่าน revert commit | ผ่านการสร้างแท็กก่อนหน้าขึ้นใหม่ |
สำคัญ: ไม่ใช่ทุกงานเร่งด่วนที่เป็น hotfix หากผู้จัดการพูดว่า “เราต้องเพิ่มปุ่มอย่างเร่งด่วน” — นั่นไม่ใช่ hotfix แต่เป็นการเปลี่ยนลำดับความสำคัญ ฮอตฟิกซ์ที่แท้จริงถูกกำหนดโดยความรุนแรงต่อผู้ใช้ ไม่ใช่ความเร่งด่วนทางธุรกิจ เกณฑ์: หากแอปพลิเคชันไม่ขัดข้องและข้อมูลไม่รั่วไหล — งานรอการเผยแพร่ตามแผน
ขั้นตอนแรกเมื่อพบปัญหาร้ายแรงคือการคัดแยก — การประเมินความรุนแรงอย่างรวดเร็ว วิศวกรที่ปฏิบัติหน้าที่ยืนยันข้อบกพร่อง ตรวจสอบล็อกและรายงานการขัดข้อง และพิจารณาว่าปัญหาเป็นการถดถอยจากการเผยแพร่ล่าสุดหรือข้อบกพร่องที่มีมายาวนาน หากความรุนแรงคือ P0 — ไปป์ไลน์ hotfix จะถูกเริ่ม ขั้นตอนการคัดแยก ไม่ควรใช้เวลาเกิน 15 นาที
ขั้นตอนที่สอง — การสร้างสาขาจากแท็กการเผยแพร่ล่าสุด (v2.5.0 → hotfix/v2.5.1) นักพัฒนาทำการแก้ไขขั้นต่ำ คอมมิตด้วยคำนำหน้า HOTFIX ในข้อความ พุชและเปิด PR ที่มีป้าย [HOTFIX] การตรวจสอบโค้ดแบบ fast-track: ผู้ตรวจสอบสองคนถูกกำหนดโดยอัตโนมัติผ่าน CODEOWNERS เวลาตรวจสอบไม่เกิน 30 นาที หากไม่มีการตรวจสอบภายใน 20 นาที — ผู้ตรวจสอบจะถูกข้ามและกำหนดคนถัดไป
ขั้นตอนที่สาม — การสร้างและการปรับใช้ผ่าน CI/CD ไปป์ไลน์ hotfix แตกต่างจากปกติ: การทดสอบการรวมระบบที่ยาวนาน (ซึ่งใช้เวลาหลายชั่วโมง) จะถูกข้าม มีเพียงชุด smoke เท่านั้นที่ทำงาน (10–15 สถานการณ์ร้ายแรง 5–10 นาที) หลังการปรับใช้: การตรวจสอบอัตราการขัดข้อง อัตราข้อผิดพลาด ความหน่วงของ API — เป็นเวลา 30 นาที เมตริก DORA สำหรับ hotfix: เวลากู้คืนเฉลี่ย (MTTR) ควรน้อยกว่า 1 ชั่วโมง
# .github/workflows/hotfix-deploy.yml
name: Hotfix Deploy Pipeline
on:
pull_request:
types: [labeled]
branches: [hotfix/*]
jobs:
hotfix-checks:
runs-on: ubuntu-latest
if: contains(github.event.label.name, 'hotfix-critical')
steps:
- uses: actions/checkout@v4
- name: Validate diff size
run: bash .github/scripts/diff-check.sh 30
- name: Build
run: ./gradlew assembleRelease
- name: Smoke test
run: ./gradlew smokeTest
- name: Deploy to staging
run: fastlane deploy_staging
- name: Approve & deploy to production
if: success()
run: fastlane deploy_production
env:
HOTFIX_MODE: true
การเพิ่มประสิทธิภาพหลักในไปป์ไลน์นี้: การตรวจสอบ diff (ไม่เกิน 30 บรรทัด) การข้ามการทดสอบการรวมระบบ การปรับใช้อัตโนมัติไปยัง staging และ production เมื่อการทดสอบ smoke สำเร็จ HOTFIX_MODE ตัวแปรสภาพแวดล้อมที่เปิดใช้งานการตรวจสอบเพิ่มเติมในรันไทม์ — ตัวอย่างเช่น การบันทึกเพิ่มเติมสำหรับการวินิจฉัยปัญหาอย่างรวดเร็ว
กลยุทธ์การทำงานกับสาขา hotfix อธิบายไว้ใน Gitflow Workflow กฎหลัก: สาขา hotfix ถูกสร้างขึ้นจากแท็กการเผยแพร่ล่าสุด (git checkout -b hotfix/v2.5.1 tags/v2.5.0) ไม่ใช่จาก develop หรือ main ซึ่งทำให้แน่ใจว่า hotfix ขึ้นอยู่กับสถานะโค้ดเดียวกันที่อยู่ในระบบผลิตและไม่ดึงการเปลี่ยนแปลงที่ยังไม่เสร็จจาก develop
เมื่อการแก้ไขเสร็จสมบูรณ์ สาขา hotfix จะถูกผสานเข้าไปใน main (หรือ master) และ develop เข้าไปใน main — คอมมิตผสานปกติพร้อมแท็กการเผยแพร่แพทช์ใหม่ (v2.5.1) เข้าไปใน develop — การผสานหรือ cherry-pick ขึ้นอยู่กับนโยบายของทีม หาก develop มีการเปลี่ยนแปลงมากกว่า main แนะนำให้ cherry-pick คอมมิต hotfix เฉพาะเพื่อหลีกเลี่ยงความขัดแย้ง GitFlow แนะนำให้ผสาน hotfix เข้าไปใน main ก่อน จากนั้นผสาน main เข้าไปใน develop
# สร้างสาขา hotfix จากแท็กการเผยแพร่ล่าสุด
git checkout -b hotfix/v2.5.1 tags/v2.5.0
# ใช้การแก้ไข
git commit -m "HOTFIX: Fix crash on Android 14 notification permission"
# ผสานไปยัง main และแท็กการเผยแพร่
git checkout main
git merge --no-ff hotfix/v2.5.1
git tag -a v2.5.1 -m "Hotfix release v2.5.1"
# ผสานไปยัง develop ด้วย
git checkout develop
git merge --no-ff hotfix/v2.5.1
# ล้างสาขาชั่วคราว
git branch -d hotfix/v2.5.1
สำคัญ: หาก hotfix แก้ไขข้อบกพร่องที่มีอยู่ในสาขา develop ปัจจุบัน (ข้อบกพร่องถูกนำเข้าไปหลายสปรินต์ก่อนหน้านี้) หลังจากผสาน hotfix เข้าไปใน main และ develop แล้ว develop ก็มีการแก้ไขอยู่แล้ว หากข้อบกพร่องถูกนำเข้าเฉพาะในสาขา release (ข้อผิดพลาดสะสมผ่าน cherry-pick) การแก้ไขใน develop อาจไม่จำเป็น การวิเคราะห์สาเหตุที่แท้จริง ช่วยพิจารณาว่าจำเป็นต้อง cherry-pick ใน develop หรือไม่
ความเสี่ยงหลักของ hotfix คือการนำเข้าข้อบกพร่องใหม่ที่ร้ายแรงกว่าเนื่องจากความรีบเร่ง จากการศึกษาของ Stripe (2021) พบว่า 15% ของ hotfix ทำให้เกิดการถดถอยและต้องใช้ hotfix ครั้งที่สอง นี่คือกฎแห่งความประชด: ยิ่งเราแก้ไขเร็วเท่าไร โอกาสที่จะทำผิดพลาดก็ยิ่งสูงขึ้น การลดความเสี่ยง ทำได้โดยการจำกัดขนาด diff อย่างเคร่งครัด (ไม่เกิน 30 บรรทัด) และการทดสอบ smoke อัตโนมัติที่บังคับ
ความเสี่ยงที่สอง — การสะสมหนี้ทางเทคนิค หากทีมใช้ hotfix เป็นประจำแทนการเผยแพร่ตามแผน ฐานโค้ดจะเสื่อมลง: คอมมิต hotfix ไม่ผ่านการปรับโครงสร้างใหม่ โซลูชันชั่วคราวไม่ถูกแทนที่ด้วยโซลูชันที่เหมาะสม เอกสารไม่ได้รับการอัปเดต การตรวจสอบสุขภาพ: หาก hotfix ถูกเผยแพร่บ่อยกว่าเดือนละครั้ง — กระบวนการเผยแพร่จำเป็นต้องได้รับการทบทวน
ความเสี่ยงที่สาม — ทางจิตวิทยา ฮอตฟิกซ์เป็นประจำทำให้ทีมหมดไฟ: นักพัฒนาที่ปฏิบัติหน้าที่อยู่ภายใต้ความเครียดคงที่ การตรวจสอบโค้ดกลายเป็นพิธีการ (ทุกคนต้องการให้เร็วขึ้น) และวัฒนธรรมคุณภาพลดลง ความถี่ hotfix ปกติสำหรับทีมที่เติบโตเต็มที่คือ 1–2 ครั้งต่อไตรมาส หากมากกว่านั้น — ปัญหาไม่ได้อยู่ที่ hotfix แต่อยู่ที่คุณภาพของการเผยแพร่ตามแผน
หลังจากปรับใช้ hotfix และทำให้เมตริกมีเสถียรภาพ จะมีการดำเนินการทบทวนหลังเหตุการณ์ (post-mortem) แบบไม่กล่าวโทษ ทีมตอบคำถามสี่ข้อ: เกิดอะไรขึ้น ทำไมการตรวจสอบถึงไม่พบข้อบกพร่อง สิ่งที่ทำเพื่อแก้ไข และวิธีป้องกันการเกิดซ้ำ Post-mortem จะดำเนินการภายใน 24–48 ชั่วโมงหลัง hotfix ในขณะที่รายละเอียดยังสดใหม่อยู่ วัฒนธรรมไม่กล่าวโทษ เป็นหลักการสำคัญ: พูดคุยเกี่ยวกับกระบวนการ ไม่ใช่บุคคล
ผลลัพธ์ของ post-mortem คือรายการดำเนินการที่เป็นรูปธรรมพร้อมผู้รับผิดชอบและกำหนดเวลา รายการดำเนินการทั่วไป: เพิ่มการทดสอบหน่วยสำหรับกรณีที่พลาด ขยายชุดทดสอบ smoke ปรับปรุงการตรวจสอบ (เพิ่มการแจ้งเตือนบนเมตริก) อัปเดต runbook สำหรับเหตุการณ์ที่คล้ายกัน รายการดำเนินการ ต้องเสร็จสมบูรณ์ก่อนการเผยแพร่ตามแผนครั้งถัดไป
คำถามที่พบบ่อย
ไม่ทั้งหมด การเผยแพร่แพทช์ (patch release) คือการส่งมอบการแก้ไขเล็กน้อยตามกำหนดเวลาปกติ ฮอตฟิกซ์คือการแก้ไขฉุกเฉินนอกกำหนดเวลา การเผยแพร่แพทช์ ผ่านวงจร QA ที่สมบูรณ์ hotfix ผ่านวงจรที่สั้นลง แต่ในทางเทคนิคทั้งสองสามารถใช้การเพิ่มเวอร์ชันแพทช์ได้ (v2.5.0 → v2.5.1)
ไม่ได้ ฮอตฟิกซ์จะถูกบันทึกใน Git เสมอเพื่อการติดตามย้อนกลับ ข้อยกเว้นคือการแก้ไขฉุกเฉินในระดับการกำหนดค่า (feature flag, remote config) ที่ไม่ต้องเปลี่ยนโค้ด แต่ละ hotfix ต้องเชื่อมโยงกับคอมมิตที่มีข้อความชัดเจนและอ้างอิงในตั๋วเหตุการณ์
สำหรับ iOS ฮอตฟิกซ์ผ่าน App Review ใช้เวลา 1–24 ชั่วโมง (สามารถขอตรวจสอบแบบเร่งด่วนได้) สำหรับ Android — 1–4 ชั่วโมงผ่าน Google Play Console เวลาปรับใช้ ขึ้นอยู่กับนโยบายของร้านค้าและการมีอยู่ของกระบวนการตรวจสอบฉุกเฉิน
การตัดสินใจทำโดยวิศวกรที่ปฏิบัติหน้าที่ตามเกณฑ์ความรุนแรง หากความรุนแรงคือ P0 — ฮอตฟิกซ์จะเริ่มโดยไม่ต้องอนุมัติเพิ่มเติม P1 — ต้องได้รับการอนุมัติจากหัวหน้าทีมเทคนิค การเสริมพลังทีม: วิศวกรที่ปฏิบัติหน้าที่มีอำนาจเริ่ม hotfix โดยไม่มีระบบราชการ
สำหรับทีมที่เติบโตเต็มที่ — 1–2 ฮอตฟิกซ์ต่อไตรมาส ความถี่มากกว่าเดือนละครั้งบ่งบอกถึงปัญหาในกระบวนการ QA ความครอบคลุมการทดสอบไม่เพียงพอ หรือกลยุทธ์การเผยแพร่ที่ไม่ถูกต้อง ความถี่ hotfix ปกติ คือ KPI ของคุณภาพกระบวนการพัฒนา
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ
อ่านเพิ่มเติม