Power of Pair Programming: Agile Thailand 2012

Triple P :: Power of Pair Programming @Agile Thailand 2012
เป็น Session นึงที่ถูกใจผมมากๆ เลยครับ
พูดโดยพี่ @roofimon -- Scrum Master ณ Opendream


ทำไมถึงถูกใจ ... ?
อาจจะเป็น Session ที่เข้าถึงได้ง่ายที่สุด เพราะผมยังคงเป็นนักศึกษาอยู่
และการ Pair มันเอาไปใช้ได้ทุกๆ วัยของ Programming ถ้าอยาก Focus งานที่อยู่ตรงหน้า
มากกว่าเรื่องอื่นๆ ที่ฟังมา เพราะเรื่องอื่นๆ อาจจะต้องทำงานจริง ถึงจะเข้าใจแนวคิดเหล่านั้น

My mind to your mind, my thoughts to your thoughts.
การ Pair กับใครสักคน ต้องนึกถึงข้อความข้างบนนี้เสมอๆ นะครับ ...

ทำไมถึงต้อง Pair Programming ?
เนื่องจาก Programmer เป็นสิ่งมีชีวิตที่ค่อนข้างอ่อนไหว และในการทำงาน ใช้สมองเยอะมาก
ฉะนั้นเราจะหาความ Balance ของการทำงานได้อย่างไร ... ไม่ใช่ทำงานจนไม่มีเวลาใช้เงิน
งานต้องเสร็จ นู่น นี่ นั่น เครียดไปไหม ... สุดท้ายจบที่ ... "ลาออก"

แม้ที่ Opendream จะใช้ Scrum Process เข้ามาช่วย แต่ก็ไม่ได้ Solve ปัญหาทั้งหมดลงได้ (แหง ?)
เป้าหมายของ Scrum Master คือการหา Velocity ของ Team

Velocity ถ้าแบบมีหลักการหน่อย เราก็จะดูจาก Burn Down Chart


แต่ Burn Down Chart ก็ไม่ได้ใช้หา Velocity ได้ง่ายๆ ... เพราะ Velocity มันเกิดจากปัจจัยภายนอกได้
และทุกอย่างจะถูกฟ้องด้วยงาน ดีหรือไม่ดี ปัจจัยภายนอกมีผลกระทบเหมือนกัน

เช่น

วันนั้นแฟนพาไปกินข้าว ดูหนัง อารมณ์ดี มีความสุข บางทีมันออกมาทาง Code เลยนะ ว่าเขียนได้ดี

หรือ

ตี Dota แพ้, ทะเลาะกับแฟน, ป่วย บลา บลา บลา  ก็เป็นปัจจัยภายนอกที่ส่งผลกระทบต่องาน

และปัจจัยภายนอกที่สำคัญมากๆ ที่มีผลกระทบอย่างมาก จนเห็นภาพว่า
"Pair คือคำตอบ" ก็คือ ...




Connecting People (Social Network) นั่นเอง
ในห้องมีคนยอมรับมาเยอะ ผมเองก็เช่นกัน
ส่วนใหญ่ทำงาน 8 ชั่วโมง ก็หมดกับการ Connecting People กับไอพวกนี้ไปแล้ว 2-3 ชั่วโมง

และแน่นอนการ Block ของพวกนี้ในที่ทำงานค่อนข้างไร้ประโยชน์ เปลืองเงินทำระบบปล่าวๆ ...
ฉะนั้น เล่นได้ครับ แต่ให้เล่นยังไงให้มีความ Balance กับงานที่ทำหน่อย ไม่ใช่เล่นแม่งทั้งวัน


Ownership 
ความเป็นเจ้าของเครื่อง เวลาเป็นเจ้าของเครื่องเพียงคนเดียวเนี่ย
จะทำอะไรก็ได้ ถูกไหมครับ ? ฉะนั้น เราจะหลุดไป Connecting People ได้ง่าย (Facebook, etc.)
และถ้าหลุดเมื่อไหร่นะ จะเกิดสิ่งที่เรียกว่า Ripple คือ หลุดแล้วยาวเลย ทีนี้

ดังนั้นเราจึงต้องใช้ ....


Pair Programming
ซึ่งเป็น Practice หนึ่งที่ยืมมาจาก XP (eXtreme Programming ซึ่งเป็น Agile แบบหนึ่ง)



Pair Programming แล้วได้อะไร ?
      มีคนเคยกล่าวไว้ว่า "การ Pair Programming นั้น อาจจะทำให้งานช้าลง 15% แต่ทำให้งานมี Quality มากขึ้น 10 - 20%"
ทั้งนี้เราแบ่งการ Pair Programming เป็น 3 ประเภทคือ 

  • คนที่ Skills พอๆ กัน Pair กันเพื่อเพิ่ม Productivity ของงานให้มากขึ้น และมันจริงครับ Focus, Concentrate กับงานมีมากขึ้น Productivity, Quality ก็มากขึ้นตามไปด้วย (ถ้าไม่พากันหลงป่า ...) 
  • Senior Programmer มานั่ง Pair กับ Junior นั่นจะทำให้ Skills ของฝั่ง Junior ไวมาก (แต่นั่นก็ขึ้นอยู่กับ Learning Curve ของอีกฝ่ายด้วย) แต่ส่วนใหญ่แล้วพบว่ามันได้ผลจริงๆ Junior จะ Up Skill ได้ไวมาก อาจจะเป็นเพราะได้รับคำแนะนำ ให้วิ่งมาถูกทางตลอด  
  • 2 คนมีกันคนละ Skills เช่นคนนึงเป็น Infar (รู้คำสั่ง Linux เยอะ) อีกคนเป็น Dev แบบนี้การ Share Knowledge เกิดขึ้นทันที และสามารถผ่านปัญหาบางอย่างไปได้อย่างรวดเร็ว เช่น ถ้าเกิด Dev นั่งทำงาน และติดปัญหาเกี่ยวกับคำสั่ง Linux ทำยังไงล่ะ ? Dev ก็จะ Google แล้วใช่ว่าจะเจอเลยนี่ ตรงนี้ก็จะช่วยได้เยอะ ถ้ามีคนที่มี Domain Knowledge ในเรื่องที่อาจะเกิดปัญหามานั่งข้างๆ

จะเริ่ม Pair Programming อย่างไร ... 

1. Pair Stationary  -- 1 Computer, 1 Mouse, 1 Keyboard, 2 Person


2. Lost Ownership -- แน่นอนว่า เมื่อมี 2 คน ความเป็นเจ้าของเครื่อง เราก็ต้องแชร์ให้อีกฝ่ายด้วย จะไม่สามารถหลุดไป Connecting People ได้ (มึงจะเล่น Facebook ยังไง? ปัญหาที่แท้จริงคือ "จะเข้า Facebook ของใคร?")

3. Pair Switching -- สลับคู่ Pair กันบ้าง ... ไม่งั้นอาจจะกรณีฮั้วกันเพื่อ Connecting People ทั้งนี้หมายถึงการสลับระหว่างคนจับเม้าส์, คีย์บอร์ด และสลับกับคู่ Pair อื่นๆ เพื่อแลกเปลี่ยนประสบการณ์ใหม่ๆ ในการเขียนโปรแกรม

4. Pair Learner -- คนที่มีประสบการณ์มากกว่าจะเป็นจับเม้าส์ เพราะมีหน้าที่ดู Flow ของงาน ว่าจะไปส่วนไหนของ Code ต่อ อาจจะช่วย Review Code ไปในตัวด้วย (Code ที่ได้ก็มี Quality มากขึ้น) และคนที่พิมพ์ก็จะได้ความรู้จากคู่ Pair ด้วย อาจจะสลับกันได้บ้าง ตามความต้องการ

5. Uninterested and Distraction -- อาจจะมีคู่ Pair ที่เกิดปัญหาและต้องการคนที่กำลัง Pair กับคนอื่นมาช่วย จะทำให้เกิด Distraction กับงานของอีกฝ่าย เราควรจะปล่อยให้เขา Concentrate กับงานตัวเองก่อน แล้วค่อยมาแก้ปัญหาให้เรา

6. When no Pair !! -- การ Pair ต้องเป็นงานที่ยากสักหน่อย ไม่ใช่งานที่ง่ายไป หรืองานที่ละเอียดอ่อน เพราะมันอาจจะทำให้งานช้าลงได้อีก ... งานบางอย่างทำคนเดียวไวกว่า (เช่น CSS เขาว่างั้น) หรือเรื่องส่วนตัวเช่น เข้าห้องน้ำ อ่านหนังสือ ก็คงไม่ต้องไป Pair ถูกป่ะ ? :P

7. Take a Rest -- พักบ้าง ... ที่พี่รูฟใช้คือ 80/20 นั่นคือ ใน 1 ชั่วโมง ให้ Pair 45 นาที และพัก 15 นาที ไม่ใช่ Pair ติดกัน 8 ชั่วโมง อะไรแบบนั้น ... เพราะจะทำให้ Programmer เครียดได้ เพราะเวลา Pair นั้น Focus ที่งานจะเยอะ เกิดความ Concentrate กับงาน และทำให้เครียดได้ง่าย ... แม้ Productivity จะสูงแต่จะส่งผลเสียกับทีมแน่ๆ



Popular posts from this blog

12 วิธี การบริการและดูแลลูกค้าในร้าน Starbucks

"อีสุกอีใส" ประสบการณ์เมื่อต้องมาเป็นตอนอายุ 22

[Android Dev] การติดตั้ง Eclipse+AndroidSDK เพื่อพัฒนาโปรแกรมบน Android