Skill dependency in Agile team

multiskilled ในทีมที่ประกอบด้วยงานที่มีความแตกต่างกันมาก เช่น มีการแบ่งเป็น front-end และ back-end ที่ใช้เทคโนโลยีที่แตกต่างกัน ตัวอย่างเช่น ในทีมที่ผมเคยทำงานด้วย ส่วน front-end เป็น Java web ส่วน back-end เป็น mainframe COBOL การจะให้คน ๆ หนึ่งสามารถทำงานได้ทั้งสองเทคโนโลยีที่มีความซับซ้อนแบบนี้ เรียกได้ว่า เป็นไปไม่ได้เลย เพราะ กว่าจะทำงานได้จริงก็อาจจะต้องใช้เวลาหลายปี เพื่อเรียนรู้ทั้งสองด้าน ที่สำคัญเราจะได้ เป็ดแก่ ๆ มาตัวหนึ่ง แทนที่จะเป็น นก และ ปลา คือ ทำได้หลายอย่างแต่ไม่รู้จริงสักอย่าง

ถ้าอย่างนั้นเราควรทำอย่างไร?

สิ่งที่ผมได้ทำ และคิดว่าเป็นแนวทางที่ดีคือ การให้คนแต่ละคนโฟกัสกับสิ่งที่ตนเองเชี่ยวชาญ แล้วทำงานประสานกันเป็นหนึ่งเดียว (synergy) เพื่อให้ได้ตามเป้าหมาย

แต่คงมีหลายคนค้านว่า ทำอย่างนั้นก็เกิด skill dependency สิ ถ้าคนนั้นลาหยุด หรือป่วย จะทำอย่างไร โปรเจ็คไม่ต้องหยุดชะงักไปเลยเหรอ เช่นคนทำ back-end ไม่อยู่ front-end ก็ทำงานต่อไม่ได้เลยน่ะสิ

วางแผน วางแผน วางแผน !!!

เราต้องยอมรับว่า skill dependency เป็นเรื่องปกติ และไม่ควรปฏิเสธมัน กล่าวคือ ทุกคนในทีมต้องยอมรับว่า เราขาดกันไม่ได้ แล้วร่วมกันวางแผนตั้งแต่ต้นสปริ้นต์ เพื่อหลีกเลี่ยง dependency conflict ในระหว่างสปรินต์ เช่น ถ้า back-end ลาหยุด ครึ่งสปรินต์ งานช่วงแรกควรเป็นงานประเภท front-end only คือ ต้องไม่เกี่ยวกับ back-end เลย ถ้าทำอย่างนี้ก็หมดปัญหา ส่วนถ้ามีการป่วยหรือเหตุสุดวิสัยเราคงต้องมีการ re-plan ใหม่เพื่อให้เหมาะสมกับเหตุการณ์ปัจจุบันมากที่สุด แต่ถ้าพยายามแล้ว แต่หางานแบบที่ไม่เกี่ยวกันไม่ได้เลย คงจะต้องมีการ split งาน ออกเป็นสองส่วน แล้ว กำหนด definition of done ของ ส่วนที่จะทำก่อน แต่ต้องอาศัยอีกส่วนหนึ่ง ซึ่งปกติแล้ว ก็คือ back-end ว่า จะใช้การ hard-code ค่าที่ return มา หรือไม่ก็มี mock data แทนที่จะเป็นการต่อเชื่อมจริง ๆ เพียงเท่านี้เราก็สามารถ demo ให้ ลูกค้าดูได้เพื่อให้ได้ feedback ในตอนท้ายของสปรินต์แล้ว สังเกตว่า เมื่อกลับมาทำส่วนที่เหลือจะต้องมี ค่าใช้จ่ายในการ เอาส่วนที่เป็น mock up ออก แล้ว เชื่อต่อกับของจริงแทน

ขอย้ำอีกครั้งนะครับว่า การพยายามทำให้ team เป็น multiskilled team เป็นเรื่องที่ทำให้เป็นจริงได้ยาก และ คนส่วนใหญ่ไม่สามารถทำได้ สิ่งที่จะเกิดขึ้นคือ เราจะเสียคนดี ๆ ไป เพราะ เขาสามารถหางานที่ต้องการเพียง skill เดียว แต่ให้ผลตอบแทนที่เท่ากันหรือดีกว่า ได้ ตัวอย่างเช่น มีพนักงาน คนหนึ่ง ที่เป็นผู้เชี่ยวชาญ ภาษา ruby ปรากฏว่า บริษัทอยากให้เธอเขียน Java ได้ด้วยเลยผลักให้เรียน Java ผลลัพธ์ที่อาจเกิดขึ้นคือ เธออาจจะหางานที่เขียนเพียง ruby ภาษาเดียวและให้ผลตอบไม่ต่างกันได้โดยง่าย ในทางกลับกัน บริษัทก็ไม่สามารถให้เงินเดือนเธอเท่ากับสองคนได้ เพราะ เวลาที่เธอเขียน ruby ก็เขียน Java ไม่ได้ และเวลาที่เขียน Java ก็เขียน ruby ไม่ได้ ผลกำไรจากการทำงานของเธอจึงไม่ใช่สองเท่าอย่างที่ต้องการ ผลสุดท้ายคงไม่ต้องเดาว่า เธอจะทำงานต่อไปกับที่นี่หรือไม่

ความจริงแล้ว อไจล์ ไม่เคยแนะนำให้สร้าง multiskilled team เลย อไจล์ แนะให้สร้าง cross-functional team คือ ทีมที่มีคนจากหลากหลายความเขียวชาญมารวมกันเป็นทีมต่างหาก ซึ่งการที่คนถนัดเขียน python ก็ได้เขียน python ถนัดเขียน ruby ก็ได้เขียน ruby ต่างหาก คือส่ิงที่เขาแนะนำ ส่วนการที่บางคนมีหลาย skills ในคนเดียวถือเป็นข้อบวก แต่ไม่ใช่ ข้อจำเป็น อย่างที่กล่าวข้างต้นไปแล้ว

Advertisements

ใส่ความเห็น

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out /  เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out /  เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out /  เปลี่ยนแปลง )

w

Connecting to %s