เราตัดสินใจอย่างไรว่าเมื่อไหร่ควร Refactor และเมื่อไหร่ควร Rewrite

นักพัฒนาทุกคนต้องเคยเผชิญกับช่วงเวลานี้

โค้ดทำงานช้า การเพิ่มฟีเจอร์ใช้เวลานานเกินไป พนักงานใหม่เข้าใจระบบได้ยาก และในที่สุดก็จะมีใครบางคนเสนอให้เขียนระบบใหม่ทั้งหมด (Rewrite)

โดยปกติแล้ว ทีมจะแบ่งออกเป็นสองกลุ่ม กลุ่มหนึ่งต้องการเริ่มใหม่ทั้งหมด ส่วนอีกกลุ่มกังวลเรื่องความล้มเหลวจากการ Rewrite ในอดีต ซึ่งทั้งสองฝ่ายต่างก็มีเหตุผลที่ฟังขึ้น

การ Rewrite ไม่ใช่การแก้ปัญหาที่วิเศษนัก บ่อยครั้งที่มันใช้เวลานานกว่าที่วางแผนไว้ คุณอาจต้องดูแลทั้งสองระบบไปพร้อมๆ กัน และคุณอาจจะทำผิดพลาดซ้ำรอยเดิมในเวอร์ชันใหม่ด้วยซ้ำ

การ Rewrite จะสมเหตุสมผลในกรณีเฉพาะดังนี้:

• โมเดลข้อมูล (Data model) ผิดพลาดอย่างสิ้นเชิงเมื่อเทียบกับความต้องการทางธุรกิจ • เทคโนโลยีที่ใช้ล้าสมัยและไม่มีการอัปเดตด้านความปลอดภัยอีกต่อไป • ความต้องการทางธุรกิจเปลี่ยนไปมากจนระบบเดิมไม่สามารถตอบโจทย์ได้อีกต่อไป • ไม่มีใครในทีมปัจจุบันเข้าใจการทำงานของระบบเลย

ถึงอย่างนั้น ก็อย่าใช้วิธีเปลี่ยนแบบ Big Bang ให้ใช้รูปแบบ Strangler Fig Pattern แทน โดยค่อยๆ สร้างระบบใหม่ขึ้นมาทีละส่วนควบคู่ไปกับระบบเดิม

แต่ส่วนใหญ่แล้ว สิ่งที่คุณต้องการจริงๆ คือการ Refactor

การ Refactor เป็นทางเลือกที่ถูกต้องเมื่อ:

• คุณยังสามารถเพิ่มฟีเจอร์ได้ แม้ว่าจะล่าช้าบ้างก็ตาม • ทีมยังคงเข้าใจโค้ดปัจจุบัน • ความยุ่งเหยิงจำกัดอยู่แค่ในบางโมดูล (Modules) เท่านั้น • ธุรกิจไม่สามารถหยุดส่งมอบฟีเจอร์ใหม่ๆ ได้

ก่อนที่จะตัดสินใจ ให้ถามตัวเองก่อนว่าทำไมโค้ดถึงแย่ลง

หากปัญหาคือหนี้ทางเทคนิค (Technical debt) ให้ Refactor ในส่วนที่แย่ที่สุด แต่หากปัญหาคือการขาดการทำ Code Review หรือวัฒนธรรมการทำงานที่ไม่ดี การ Rewrite ก็ช่วยไม่ได้ คุณก็แค่จะสร้างความยุ่งเหยิงชุดใหม่ด้วยนิสัยเดิมๆ เท่านั้น

ถามคำถามเหล่านี้ก่อนตัดสินใจ:

• เราสามารถแก้ไขส่วนที่แย่ที่สุดแยกต่างหากได้หรือไม่? • โมเดลข้อมูลไม่รองรับความต้องการทางธุรกิจในปัจจุบันใช่หรือไม่? • ความรู้หรือความเข้าใจส่วนไหนที่เราจะสูญเสียไปหากเริ่มใหม่ทั้งหมด? • ธุรกิจมีความมั่นคงพอที่จะรองรับช่วงเปลี่ยนผ่านที่ยาวนานได้หรือไม่?

การเริ่มต้นใหม่นั้นให้ความรู้สึกที่ดี แต่การทำ Rewrite ให้เสร็จต่างหากคือส่วนที่ยากที่สุด โดยส่วนใหญ่แล้ว แผนการ Refactor ที่เป็นระบบจะปลอดภัยและมีประสิทธิภาพมากกว่า

ที่มา: https://dev.to/daviefano/how-we-decide-when-to-refactor-and-when-to-rewrite-40pk