ควร update dependents ระหว่าง พัฒนา project ดีไหม

ระหว่างพัฒนา project อยู่นั้น dependency/package ที่ใช้อยู่บางตัวก็มีการ update version ขึ้นมา เราควร update ตามไหม?

“dependencyA มี update ออก version ใหม่ครับพี่, update เลยไหมครับ” เสียงดังขึงขันของ นักพัฒนาหนุ่มไฟแรง กล่าวขึ้น
“ไม่” นักพัฒนาผู้มากประสบการณ์ ตอบโดยทันที

โดยทั่วไปแล้ว ไม่แก้อะไรทั้งนั้นอะ มัน work อยู่แล้ว จะไปแก้ไปทำไม

คำตอบนี้เป็นจริงหรือเปล่า อยากจะชวนมาลองคิดกันครับ

ทำไมเราไม่ถึงควร update

เพราะกลัวเจ้ง (กลัว project จะทำงานไม่เหมือนเดิม อย่างที่เคยเป็น) แล้วทำไมเราถึง กลัวเจ้งละ
เพราะเราฝีมือไม่ถึงไม่เข้าใจสิ่งที่เราเขียน, กลัวว่า dependency ที่ update มาจะทำ project เราเจ้ง รวมไปถึง เราขี้เกียจ regression test และ อื่นๆ

มาดูแต่ละเหตุผลกัน

1. เราฝีมือไม่ถึงไม่เข้าใจสิ่งที่เราเขียน

ถ้าเป็นแบบนี้เราควรพัฒนาตัวเอง

2. การ update dependency จะทำให้ project เจ้ง

2.1 ถ้าเขาใช้ pattern Semantic Versioning (e.g. <MAJOR>.<MINOR>.<PATCH>)

ถ้า dependency นั้น update <MAJOR> version เช่น จาก 2.8.0 => 3.0.0, อันนี้เข้าใจได้ เพราะ อาจจะมี breaking change จริงๆก็ได้ ซึ่งส่งผลต่อการเรียกใช้

ถ้า dependency นั้น update <MINOR> version เช่น จาก 2.8.0 => 2.9.0 เขาพัฒนา UX, เราจะไม่อยาก update ให้ user ได้ใช้งาน UX ที่ดีขึ้นหรอ ?

ถ้า dependency นั้น update <PATCH> version เช่น จาก 2.8.0 => 2.8.1 เขาแก้ไขเรื่อง security, เราไม่ควร update ด้วยหรอ

2.2 กลัวเขาจะไม่ใช้ pattern Semantic Versioning ทำให้เราคาดการณ์ไม่ได้ว่าควรจะ update หรือไม่

บางทีเราอาจจะเจอเหตุการณ์ update <PATCH> แล้วเราเจ้ง (เช่น จาก 1.0.0 => 1.0.1), กรณีนี้เป็นไปได้ ว่าทั้งเราและเขาอาจจะผิด เช่น

  • เขาผิดจริงๆ ที่ breaking change public API แล้วเราไม่สามารถใช้แบบเดิมได้
  • เราอาจจะผิดเช่น เราใช้ programming language version ต่ำเกินไปเช่นเราใช้ Nodejs 4 (ปัจจุบัน Nodejs 14 LTS) แล้วเขาแก้ syntax นิดเดียว เราก็เจ้งได้

3. เราขี้เกียจ regression test

3.1 manual test

อันนี้ยังไงถ้าเราอยากจะ update dependency เราก็ต้องทดสอบ manual test อยู่ดีซึ่งกินเวลาเยอะมากๆ

3.2 automated testing

ถ้ามี automated testing แล้ว automated testing เราดีพอเราควรจะไม่กลัวที่จะ update dependency

ทิ้งท้าย

  1. การที่ dependency มีการ update version แล้วเราไม่ update ตาม
    ทำไมถึงมี project Automated dependency updates, Greenkeeper (project พวกนี้แนะนำให้เราพยายาม dependency version เสมอๆ) เกิดขึ้น
  2. ถ้าเราจะบอกให้ไป update dependency ที่ next release (หรือ sprint หน้า) มันช่วยอะไรเรา ? หรือแค่ผลัดไปเฉยๆ
  3. ถ้าเราคิดว่า การ upgrade dependency เป็นเรื่องถูกต้อง, เราจะแก้ปัญหา ด้านบนที่กลัวเจ้ง อย่างไร

และเมื่อเรามาลองสวมหมวกต่างๆ

as a developer เราควรทำอย่างไร ในเมื่อ feature ที่ต้องทำก็เยอะเหลือเกิน
as a developer team lead เราควรทำอย่างไร เมื่อเราเป็นคนดูแลโดยรวม
as a QA เราควรทำอย่างไร, re-test ดีไหม และทันไหม
as a product owner เราควร update dependency เพื่อเพิ่ม UX ให้ user ดีไหม หรือ เอาแค่งานใน sprint ให้เสร็จๆก่อน