| name | request-refactor-plan |
| description | สร้างแผน refactor แบบละเอียดที่ซอยเป็น commit เล็ก ๆ ผ่านการสัมภาษณ์ user แล้วเปิดเป็น GitHub issue ใช้เมื่อ user อยากวางแผน refactor สร้าง refactoring RFC หรือแตก refactor ออกเป็นขั้นเล็ก ๆ ที่ปลอดภัย |
skill นี้จะถูกเรียกเมื่อ user อยากสร้างคำขอ refactor ให้ทำตามขั้นตอนด้านล่าง จะข้ามขั้นตอนที่เห็นว่าไม่จำเป็นก็ได้
-
ขอให้ user อธิบายปัญหาที่อยากแก้แบบยาวและละเอียด รวมถึงไอเดียแนวทางแก้ที่อาจเป็นไปได้
-
สำรวจ repo เพื่อยืนยันสิ่งที่ user เล่ามา และทำความเข้าใจสถานะปัจจุบันของ codebase
-
ถามว่าเขาเคยพิจารณาทางเลือกอื่นหรือยัง และนำเสนอทางเลือกอื่น ๆ ให้เขาดู
-
สัมภาษณ์ user เรื่อง implementation ให้ละเอียดและถี่ถ้วนสุด ๆ
-
เคาะขอบเขตที่แน่นอนของ implementation ตกลงให้ชัดว่าตั้งใจจะเปลี่ยนอะไรและตั้งใจจะไม่เปลี่ยนอะไร
-
เข้าไปดูใน codebase ว่าบริเวณนี้มี test coverage แค่ไหน ถ้า coverage ไม่พอ ให้ถาม user ว่ามีแผนเรื่องการ test ยังไง
-
แตก implementation ออกเป็นแผนของ commit เล็กจิ๋ว ๆ จำคำแนะนำของ Martin Fowler ที่ว่า "ทำแต่ละขั้นของการ refactor ให้เล็กที่สุดเท่าที่จะเล็กได้ เพื่อให้เห็นโปรแกรมยังทำงานได้อยู่เสมอ"
-
สร้าง GitHub issue พร้อมแผน refactor ใช้ template ต่อไปนี้สำหรับ description ของ issue:
โจทย์ปัญหา
ปัญหาที่ developer กำลังเจอ เล่าจากมุมมองของ developer
แนวทางแก้
วิธีแก้ปัญหา จากมุมมองของ developer
รายการ commit
แผน implementation แบบยาวและละเอียด เขียนแผนเป็นร้อยแก้วธรรมดา โดยแตก implementation ออกเป็น commit ที่เล็กที่สุดเท่าที่จะทำได้ แต่ละ commit ต้องทิ้ง codebase ไว้ในสถานะที่ยังทำงานได้
เอกสารการตัดสินใจ
รายการการตัดสินใจด้าน implementation ที่เกิดขึ้น ซึ่งอาจรวมถึง:
- module ที่จะสร้าง/แก้ไข
- interface ของ module เหล่านั้นที่จะถูกแก้ไข
- ข้อชี้แจงเชิงเทคนิคจาก developer
- การตัดสินใจเชิงสถาปัตยกรรม
- การเปลี่ยน schema
- API contract
- interaction เฉพาะจุด
ห้ามใส่ file path หรือ code snippet แบบเจาะจง เพราะพวกมันอาจล้าสมัยเร็วมาก
ข้อตัดสินใจด้านการ test
รายการการตัดสินใจด้านการ test ที่เกิดขึ้น ให้ใส่:
- คำอธิบายว่า test ที่ดีเป็นอย่างไร (test เฉพาะพฤติกรรมภายนอก ไม่ใช่รายละเอียดของ implementation)
- module ไหนบ้างที่จะถูก test
- ตัวอย่างที่มีอยู่ก่อนแล้วสำหรับ test พวกนี้ (เช่น test แนวเดียวกันที่มีอยู่ใน codebase)
นอกขอบเขต
คำอธิบายสิ่งที่อยู่นอกขอบเขตของการ refactor นี้
โน้ตเพิ่มเติม (ใส่หรือไม่ก็ได้)
โน้ตอื่น ๆ เกี่ยวกับการ refactor นี้