อะหรือ.. อะหรือ.. อะหรือว่า Pull request ยังไม่มีคนกด Approved … ว่าซั่น!

Kittisak Buaphanna
te<h @TDG
Published in
3 min readJul 22, 2020

ฝาก PR ยังไงให้ Reviewer แฮปปี้ เราเองก็แฮ๊ปปป ปี้! … ไปดูกัน!… ไปเต๊อะ ไปแอ่ว จังหวัดเจียงฮาย… !

ผู้เขียนได้อ่านบทความ On Empathy & Pull Requests จาก Blog ของทีมงาน Slack Engineering เป็นบทความตั้งแต่ปี 2016 แต่พออ่านแล้วรู้สึกว่ามันเป็นวิธีการทำงานที่น่าสนใจทีเดียว เลยสรุปตามที่ตัวเองเข้าใจมาให้รับชมรับฟังกันจ้า ^^

Pic: https://edentechlabs.io/post/why-software-developers-should-have-empathy/

หากพูดถึงการเอาใจเขามาใส่ใจเรา (Empathy) อาจารย์ Brené Brown แห่ง University of Houston ได้ให้คำนิยามเอาไว้ง่าย ๆ 4 องค์ประกอบตามนี้เลย:

  1. เป็นคนที่มีความสามารถในการการมองโลกแบบเดียวกับที่คนอื่นมองได้
  2. เป็นคนไม่ตัดสินใคร
  3. เป็นคนที่สามารถเข้าใจความรู้สึกของคนอื่น
  4. เป็นคนที่สามารถบอกสิ่งที่ตนเองเข้าใจในความรู้สึกของคนอื่นกลับไปยังคนคนนั้นได้

โดยหลักการง่าย ๆ เพียง 4 ข้อนี้เองที่ไปเตะปาก! เอ้ย! เตะตาทีมงาน Slack Engineering เข้าอย่างจัง! แล้วก็ได้มีความพยามยามนำหลักการดังกล่าวมาใช้ในการทำงานจริง ๆ กับทีมงาน Developer ซะด้วย! โอ้ววว เขาทำยังไง เราไปดูกัน!

1. Pull request ที่ดีต้องมีท้องเรื่อง

แหมะ.. ยังกับแต่งบทละครเนาะ ต้องมีท้องเรื่อง ฮ่าๆ

Pic: https://www.freepik.com/free-photo/context-word-wooden-background_4973637.htm

เรามาดูเหตุการณ์สมมุติ เวลาที่มี Developer คนใดคนหนึ่งเขียนโค้ดเสร็จแล้วเปิด Pull request กันว่ามันจะเป็นอย่างไร….

Dev ประยุทธ์ คนเปิด PR

  • สบ๊าย.. งานเสร็จแล้วโว้ยย ได้เวลาไปทำฟีเจอร์อื่นซักที งมตั้งนาน ปั๊ดโถ่ว!
  • ฉันเขียน ฉันรู้ Code ของฉันมันแก้ปัญหาต่าง ๆ ได้ เพราะฉันเป็นคนดรีย์!
  • ได้เวลางีบ….. คร่อก

Dev ประวิทย์ คนที่ต้องมาทำ Code review

  • อิหยังวะ! ฟีเจอร์นี้มันอยู่ตรงไหนของโปรเจคเนี้ย!
  • ฟีเจอร์ที่เอ็งเขียนมันทำงานยังไงฟะ! WTF
  • กูมันบิดาแห่งความ “ไม่รู้” เฟ้ย
  • กด Approved ….​( เฉ้ยยยยย )

เรื่องราวต่าง ๆ เป็นเพียงเหตุการณ์สมมุติ กรุณาใช้ ค.ว.ย. (คิด วิเคราะห์ แยกแยะ) ด้วยจ้า

สุดท้ายการทำ Pull request / Code review ของทีมนี้ก็จะกลายเป็นการทำงานที่ไร้ประสิทธิภาพ แถมยังขาดคุณภาพเอามาก ๆ เพราะอาจจะสุ่มเสี่ยงที่จะเกิดปัญหาต่าง ๆ ภายในโปรเจคได้อีกต่างหาก พูดได้ว่ามีแต่เสียกับเสียจริง ๆ แย่ ๆ…

การมีท้องเรื่องใน Pull request จึงมีความสำคัญมาก ที่จะสามารถบอกผู้ที่เป็น Reviewer ที่จะมาทำ Code review ต่อจากเราได้ง่ายมากขึ้น โดยมีวิธีการทำง่ายนิดเดียว ดังนี้เลย:

  • เขียนหัวเรื่อง (PR Title) ไว้ให้สื่อกับงานที่กำลังทำ พยายามนึกถึงว่าถ้ามีคนมาอ่านแล้วเขาจะเข้าใจมันมั้ย ? เพราะมันจะดีมากเลยถ้าคนที่มาทำ Code review แล้วแค่อ่าน PR Title ปุ๊บ สามารถเข้าใจได้ทันทีว่างานนี้มันคืออะไร เกี่ยวกับอะไร
  • พยายามเขียนคำอธิบาย (PR Description) เพื่อบอกเรื่องราวของ PR นี้ซักหน่อย อาจจะเริ่มที่ปัญหาคืออะไร ? เคยลองทำวิธีไหนแล้วมันไม่เวิร์กบ้างมั้ย ? ทำไมถึงทำวิธีนี้หล่ะ ? เพื่อเล่าเรื่องว่าทำไมถึงต้องเขียนโค้ดออกมาแบบนี้
  • ถ้ามี Link ref จะดีมาก ๆ ไม่ว่าจะเป็น Link ไปที่ Project management ของทีมอย่างเช่นที่ True Digital Group ของเราจะใช้ JIRA อย่างนี้เป็นต้น เพื่อให้คนที่มาทำ Code review เขาจะได้เข้าใจมันมากยิ่งขึ้น หรือ Link อื่น ๆ ที่คุณไปลอกมา เอ้ย! ไปได้วิธีแก้ปัญหามาจาก Developer Community ต่าง ๆ อย่างเช่น Stackoverflow อย่างนี้เป็นต้น
  • ถ้ามีบางอย่างที่ไม่มั่นใจว่าทำถูกต้องหรือปล่าว ? เขียนใส่ไปใน PR Description ไปเลยก็ยังได้ เพื่อให้คนที่เป็น Reviewer เขาจะได้มุ่งประเด็นไปที่ตรงนั้นให้คุณด้วย
  • อาจจะเพิ่มคำอธิบายไปด้วยเลยว่า หากมันเคยเป็นปัญหา / บั้คที่เคยถูกแก้มาแล้ว มันเคยถูกแก้ไขมาแล้วกี่ครั้ง ? มีวิธีอื่น ๆ อีกมั้ยที่คุณคิดว่ามันน่าจะแก้ปัญหาได้ แล้วเพราะอะไรทำไมคุณถึงเลือกวิธีแก้ปัญหานี้ใน PR ครั้งนี้ ?

ไม่จำเป็นต้องเขียนคำอธิบายละเอียดทั้งหมดจากที่กล่าวมาข้างต้นก็ได้ เพียงแต่หลักการสำคัญก็คือ พยายามใส่รายละเอียดทั้งหมดที่คิดว่าคนที่เป็น Reviewer จะสามารถทำงานได้เร็ว มีประสิทธิภาพ และมีคุณภาพมากที่สุด ให้คิดว่าคนที่เป็น Reviewer กำลังช่วยทำให้งานของเราดียิ่งขึ้น เขาจะต้องรู้อะไรบ้าง ? พยายามทำให้ Reviewer อินไปกับเรื่องราวใน PR ของคุณให้ได้มากที่สุด นั่นคือเป้าหมายแรก!

2. Pull request ที่ดีต้องมีเรื่องเดียว

ใน 1 PR ควรจะมีเพียงการเพิ่ม/ แก้ไข บั้คหรือฟีเจอร์เพียงเรื่อง ๆ เดียว แต่หากมันหลีกเลี่ยงไม่ได้จริง ๆ ที่จะต้องมีหลาย ๆ อย่างรวมกัน ก็ควรจะเป็นเรื่องที่เกี่ยวเนื่องกัน เวลาที่ Reviewer เขามาทำ Code review เขาไม่ควรจะเจอ Surprise อื่น ๆ ที่นอกเหนือจากนี้อีกแล้ว ให้เขาได้โฟกัสเพียงเรื่องเดียว เขาจะได้กด Approved ให้ไว ๆ

พยายามนึกถึงว่าหากตัวเองเป็นฝ่ายที่จะต้องทำ Code review ให้กับ PR คนอื่นบ้างแล้วตัวเราเองจะอยากให้ PR นั้นมีขนาดเล็กแค่ไหน เพราะเจ้าของ PR ทุกคนคงไม่อยากทำให้ Reviewer ต้องละเหี่ยใจเวลาที่จะต้องรีวิว PR ของเราหรอกจริงมั้ย ?

3. Pull request ที่ดีมันต้องสร้างความมั่นใจได้

ต้องกลับไปถึงสาเหตุที่ทีม Developer จะต้องมีการทำ Pull request / Code review กันเลยล่ะ ว่าทำไมเราถึงต้องทำ ? หลัก ๆ ก็คือเป็นการป้องกันปัญหาต่าง ๆ ที่จะเกิดขึ้นภายในโปรเจค สำหรับคนที่เป็น Reviewer ก็จะต้องคิดอยู่เสมอว่าหาก PR ที่เราเข้าไปทำ Code review แล้วมันเกิดปัญหาขึ้นมา คุณเองถึงแม้ว่าจะไม่ใช่คนเขียนโค้ดชุดที่เกิดปัญหานั้น ๆ แต่คุณเป็นกด Approved ด้วยตัวเอง จึงจะต้องคิดอยู่เสมอว่าเรามีส่วนในความรับผิดชอบนั้น ๆ ด้วยนาจา….

สรุป…

การทำ Pull request / Code review ที่ดี เริ่มต้นง่าย ๆ ด้วยความเข้าอกเข้าใจกันของทั้งคนที่เป็นเจ้าของ PR และคนที่เป็น Reviewer นั่นเอง

จากเหตุการณ์สมมุติ (ที่สุ่มเสี่ยงต่อการโดนปรับทัศนคติ) ข้างต้น เรามาลองเปลี่ยนมุมมองใหม่ โดยยึดหลักความเข้าอกเข้าใจกันดูซักหน่อย

Dev ประยุทธ์ ผู้เปิด PR

  • สบ๊าย.. งานเสร็จแล้วโว้ยย ได้เวลาไปทำฟีเจอร์อื่นซักที งมตั้งนาน ปั๊ดโถ่ว!
  • เขียน PR Title เกริ่นนำซักหน่อย เผื่อพี่ Dev ประวิทย์อ่านแล้วจะเข้าใจทันที
  • อธิบาย PR Description เพิ่มอีกซักหน่อยดีกว่า พี่ Dev ประวิทย์จะได้เข้าใจปัญหาของ PR นี้ แล้วจะได้รู้ด้วยว่า ทำไมเราถึงแก้ไขด้วยวิธีนั้นไป
  • แปะ JIRA Link ดีกว่า เผื่อพี่ Dev ประวิทย์จะอยากรู้รายละเอียดของงานเพิ่มขึ้น อาจจะมี comment เจ๋ง ๆ ก็ได้
  • เอ…. มีบางฟังก์ชั่นเราก็ไม่ค่อยมั่นใจแฮะ… แปะไปใน PR Description เพิ่มอีกซักหน่อยดีกว่า เผื่อพี่ Dev ประวิทย์จะช่วยเราได้ เผื่อพี่แกมีไอเดียที่ดีกว่านี้
  • เท่านี้น่าจะโอเคละมั้ง
  • ได้เวลางีบ….. คร่อก!

Dev ประวิทย์ คนที่ต้องมาทำ Code review

  • อิหยังวะ! ฟีเจอร์นี้มันอยู่ตรงไหนของโปรเจคเนี้ย!
  • อ๋อ… อยู่ตรงนี้นี่เอง น้อง Dev ประยุทธ์อธิบายไว้ดีเชียวนะเนี้ย
  • เอ…​ปัญหาของ PR นี้คืออะไรน้าาา อ่าฮ้า!! เจอละ! น้อง Dev ประยุทธ์อธิบายไว้แล้ว แหม.​ละเอียดเชียว
  • เอ… ทำอย่างนี้ QA จะโอเคมั้ยน้าา ลองไปดูใน JIRA Link ที่น้องประยุทธ์แปะไว้ดูซักหน่อยดีกว่า จะได้ช่วยกันดูด้วย เผื่อน้องประยุทธ์เค้าลืม
  • มีฟังก์ชั่นบางอย่างที่น้องประยุทธ์ไม่ค่อยมั่นใจ งั้นเรา comment ไว้หน่อยดีกว่า ว่าน้องประยุทธ์ทำดีแล้ว!
  • พี่จะไม่ใช่บิดาแห่งความ “ไม่รู้” อีกต่อไปเฟ้ย
  • กด Approved

และแล้ว เหตุการณ์สมมุติของเรา ก็จบบริบูรณ์ด้วยความเข้าอกเข้าใจกันเป็นอย่างดีของทั้งคู่ งานของทีมก็ไหลลื่น รวดเร็ว ไม่มีปัญหา เพราะไม่มีใครกล้ามี …..

ชะแว๊บบบ…​ไปดีกว่า…. เดี่ยวจะยาว ฮ่าๆ

ทัศนคติเจ้าของบทความดีอยู่แล้วครับ ไม่ต้องปรับเน้อออออ

--

--