Screen Shot 2558-08-08 at 11.12.01 AM
บทความจากทีม Engineering ของ Quora  ได้อธิบาย
เกี่ยวกับการดูแลคุณภาพของ code
ซึ่งส่งผลกระทบมากมายต่อการพัฒนา
โดยส่งผลอย่างชัดเจนในระยะยาว
เช่น การแก้ไข และ ดูแลรักษาระบบ เป็นต้น

โดยที่ Quora นั้นให้ความสำคัญกับคุณภาพของ code อย่างมาก
มาดูกันว่าเขาทำกันอย่างไรบ้าง ?

เริ่มต้นว่าด้วยเรื่อง ไม่มีอะไรได้มาแบบฟรี ๆ

ในการพัฒนา และ ดูแลรักษาให้ code มีคุณภาพที่ดีนั้น ไม่ใช่เรื่องที่ง่ายเลย
เพราะว่าต้องใช้เวลา ใช้ความตั้งใจ ในการพัฒนาสูง
โดยทุก ๆ คนจะมีทางเลือกเพียง 2 ทางเท่านั้น คือ

  1. ทำการพัฒนาอย่างรวดเร็ว ด้วย code ที่มีคุณภาพต่ำ
  2. ทำการพัฒนาอย่างช้า ด้วย code ที่มีคุณภาพสูง

จากทั้งสองเส้นทางนั้น คนส่วนใหญ่จะเลือกเส้นทางที่ 1 !!!

Screen Shot 2558-08-08 at 11.14.25 AM

แต่เดี๋ยวก่อนนะ …
เรามาลองหาวิธีการที่ทำให้เราพัฒนาอย่างรวดเร็ว ด้วย code ที่มีคุณภาพสูง
ว่ามีขั้นตอน และ เครื่องมืออะไรที่น่าสนใจบ้าง ?

1. ตั้งเป้าหมายที่ชัดเจน

เป้าหมายหลักของการดูแลรักษาคุณภาพ code ให้ดี
คือ ความเร็วของการพัฒนาในระยะยาว

ดังนั้นสิ่งที่ต้องตัดสินใจคือ
การแก้ไข code ในระยะยาว และ ในระยะสั้น
ซึ่งมันคือ ค่าใช้จ่ายที่ต้องเกิดขึ้นทั้งนั้น

โดยที่ Quora นั้นมีแนวคิดสำหรับการดูแลคุณภาพของ code ไว้ดังนี้

  • Code จะต้องอ่านง่าย และ เข้าใจง่าย
  • Code ในแต่ละส่วน ควรมีข้อกำหนดที่แตกต่างกันไป ให้มันเหมาะสม
  • ต้องลด overhead สำหรับการสร้าง code ที่มีคุณภาพ ด้วย การเพิ่มความรู้ เครื่องมือ ขั้นตอน และ ระบบแบบอัตโนมัติ

2. ทำการ Review code หลังจากที่ทำการ commit หรือ checkin

การ review code เป็นแนวทางที่ดีมาก ๆ
สำหรับการปรับปรุงคุณภาพ code
แต่ว่า มันใช้เวลาเยอะมาก ส่งผลให้การพัฒนาช้าลงไป

โดยทาง Quora ทำการ review หลังจากที่ทำการ commit code
นั่นคือ code จะถูก deploy ไปยัง production ก่อน
จากนั้นจะมีใครสักคนมาทำการ review
ซึ่งเป็นวิธีการที่จะไม่ไปขัดจังหวะการทำงานของเจ้าของ code
ดังนั้นเมื่อทำการ commit code แล้ว ก็ทำการย้ายไปทำงานอื่นได้เลย

ส่วนผู้ทำการ review ก็สามารถจัดสรรเวลามา review code ได้ง่ายขึ้น
และไม่ไปรบกวนเจ้าของ code อีกด้วย

จากวิธีการ review code แบบนี้
มันบ่งบอกว่าที่ Quora นั้นมีความเชื่อมั่น ไว้ใจนักพัฒนาทุกคนอย่างมาก
ซึ่งนักพัฒนาล้วนมีความสามารถที่ดี
มีความรับผิดชอบสูง

3. เรื่อง Test นั้นขาดไปเสียมิได้เลย

การทดสอบเป็นส่วนที่สำคัญมาก ๆ
โดยทำการเขียนการทดสอบในทุก ๆ ส่วนด้วยจำนวน coverage ที่สูงมาก
ทั้ง Unit test, Functional test และ UI test

จำนวน coverage ที่สูงนั้น ทำให้นักพัฒนาทำงานได้รวดเร็ว
ไร้ซึ่งความกังวลในการพัฒนา ว่าสิ่งที่สร้างจะไปกระทบกับส่วนอื่น ๆ

ยังไม่พอนะ ทีมยังให้ความสำคัญต่อ testing framework ที่ใช้
เพื่อให้มันทำงานได้อย่างถูกต้อง และ รวดเร็ว

4. กำหนด Code guideline อีกด้วย

ภายใน Quora ทำการแบ่งปันเรื่อง guideline ต่าง ๆ
เพื่อทำให้ code มีคุณภาพที่สูงขึ้น เช่น
เครื่องมือที่มีประสิทธิภาพ และ ช่วยลดการทำงาน
การแบ่งปันเรื่องต่าง ๆ ทำให้ทุกคนกล้าที่จะแสดงความคิดเห็น นั่นคือเกิดความใกล้ชิด สนิทกันมากขึ้น
เกิดมาตรฐานขึ้นมาจากความเห็นชอบจากทุก ๆ คน
ลด overhead ในการพัฒนา และ review code ลงไป

5. ทำการแก้ไข code เก่า ๆ ให้ดีขึ้น

เนื่องจากให้ความสำคัญต่อความเร็วในการพัฒนา
ดังนั้นทีมจึงต้องทำการ clean up หรือ
แก้ไข code เก่าที่ผ่านมาให้ดีขึ้นอยู่อย่างเสมอ

Screen Shot 2558-08-08 at 11.16.06 AM

โดยจะมีสัปดาห์ของการ clean up code ขึ้นมา
เพื่อลดเวลา และ ค่าใช้จ่ายในการทำงานไป
หมายถึงไม่ต้องสลับทำงานปกติ กับ การ clean up
ซึ่งเป็นกิจกรรมที่ทุก ๆ คนในทีมพัฒนา
จะได้แลกเปลี่ยนความรู้ซึ่งกันและกัน

ยังไม่พอนะ ก่อนจะทำการ clean up code
ต้องมีการจัดเรียงลำดับความสำคัญของ code ที่จะแก้ไขด้วย
โดยเรียงจากส่วนที่กระทบต่อการพัฒนามากไปน้อยนั่นเอง

6. Linting

ในการประเมินค่าใช้จ่ายสำหรับ การปรับปรุงคุณภาพ code นั้น
คนเรามักจะประเมินไว้ต่ำ หรือ สูงจนเกินไปเสมอ
ยิ่งเวลาผ่านไป code มากขึ้น
ยิ่งเวลาผ่านไป feature มากขึ้น
ยิ่งเวลาผ่านไปกฎต่าง ๆ มากขึ้น
ถ้าใช้คนมาดูแลอย่างเดียวคงไม่ได้

ดังนั้นจำเป็นต้องหาเครื่องมือมาใช้งาน
โดยทีมได้พัฒนาเครื่องมือขึ้นมาชื่อว่า qlint
สามารถนำไป integrate เข้ากับ editor และ IDE ของนักพัฒนาได้เลย
ทำให้เราเห็น feedback หรือ จุดที่ต้องปรับปรุงทันที
รวมทั้งสามารถนำไป integrate เข้ากับ
ระบบ Continuous Integration และ Continuous Deployment ได้เลย

ผลที่ได้คือ code ที่มีโครงสร้างไปในทิศทางเดียวกัน
และคุณภาพที่สูงขึ้นอย่างมาก
รวมทั้งไม่ต้องกลับมาแก้ไขมากนัก

โดยสรุปแล้ว

ทางทีมพัฒนาของ Quora นั้นให้ความสำคัญกับคุณภาพของ code อย่างมาก
การสร้างระบบที่ดี ต้องมาจากคน เครื่องมือ และ ขั้นตอน ที่ดีมีคุณภาพ
รวมทั้งสนใจเรื่องการดูแลรักษาระบบในระยะใกล้ และ ไกล ด้วย

ที่สำคัญ ต้องสร้างความสมดุลระหว่างคุณภาพ กับ feature ที่ส่งมอบด้วยเสมอ
และต้องสร้างความเชื่อมั่นให้ตัวเอง ทีม และ ระบบอีกด้วยนะครับ

วันนี้คุณ ทีม องค์กร ดูแลคุณภาพของ code กันอย่างไรบ้าง ?