XP101 : 4 – Four Variables

ในการพัฒนาซอฟแวร์นั้น จะมีตัวแปรอยู่ 4 ตัวด้วยกันคือ

1. Cost – เงินทุน
2. Time – เวลา
3. Quality – คุณภาพ
4. Scope – ขอบเขตของงาน

ในการทำงานนั้นจะเหมือนการเล่นเกมส์ที่ ลูกค้าหรือผู้บริหาร จะควบคุมตัวแปรอยู่ 3 ตัว และ เหลือตัวสุดท้ายให้ทีมพัฒนาเป็นผู้ควบคุม

มีผู้บริหารบางคนคิดว่า สามารถที่จะควบคุมมันได้ทั้งหมด โดยกำหนดเช่นว่า “ทุกคนจะต้อง ทำตามความต้องการเหล่านี้ให้เสร็จทั้งหมด ภายในเดือนหน้า และแน่นอน จะต้องมีคุณภาพได้ตามที่เราเคยทำมา” ผลลัพธ์ของมันมักจะเป็นไม่ก็ คุณภาพอยู่ก้นเหว (เหมือนที่เคยๆ ไง) หรือไม่ก็ ซอฟแวร์ห่วยแตกที่ทำเสร็จช้าอีกต่างหาก

วิธีเดียวที่จะแก้ปัญหานี้ได้คือ การทำให้ตัวแปรทั้งสี่นั้น มองเห็นได้ง่ายโดยทุกฝ่าย แล้วแสดงผลที่จะเกิดขึ้นของมันให้ทุกคนได้เข้าใจ ถ้าหากผลนั้นไม่เป็นที่ต้องการจะได้ปรับตัวแปรได้ทันท่วงที

ความสัมพันธ์ระหว่างกันของตัวแปร

เงินทุน – การใส่เงินเข้าไปมากขึ้น อาจจะช่วยให้ง่ายเสร็จเร็วขึ้นเล็กน้อย แต่ถ้าใส่มากเกินไปมักจะสร้างปัญหามากกว่าแก้ปัญหา อีกนัยหนึ่งถ้าใส่เงินไม่พอ โอกาสที่จะทำงานสำเร็จก็ริบหรี่

เวลา – การมีเวลามากขึ้นจะสามารถทำให้เพิ่มคุณภาพแก่งานได้ และยังเพิ่มขอบเขตของความต้องการได้อีกด้วย แต่เนื่องจากฟีดแบคจากการใช้งานจริงมีคุณค่ามากกว่าฟีดแบคใดๆ ทั้งหมด การให้เวลากับโปรเจ็คมากเกินไปจะเกิดผลเสีย (เพราะทำให้ได้ฟีดแบคจากการใช้งานจริงช้าลง) แต่ถ้าให้เวลาน้อยไปก็เตรียมเละได้เลย

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

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

ความสัมพันธ์ของตัวแปรทั้งสี่นั้นไม่ง่ายเลย เราไม่สามารถใส่เงินเข้าไปแล้วให้งานเสร็จเร็วขึ้นได้  อย่างที่มีคำกล่าวว่า “สตรีเก้านางไม่สามารถให้กำหนดบุตรได้ในเวลาหนึ่งเดือน” (บางคนยังต่ออีกว่า 18 นาง ก็ยังไม่ได้)

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

มีลูกค้าคนหนึ่งเคยพูดว่า “เราจะส่งงานได้ตามกำหนด เราจะต้องจ้างโปรแกรมเมอร์ 40 คน”
เคนต์ ตอบเขาไปว่า “คุณไม่สามารถ จ้างคน 40 คนได้ตั้งแต่วันแรก คุณจะต้องเริ่มต้นจากการมีทีมแรกเสียก่อน แล้ว ขยายเป็นสองทีม แล้วเป็น สี่ ภายในสองปีคุณอาจจะมีถึง 40 คน แต่สำหรับวันนี้ ไม่มีทางแน่นอน”

ปรากฏว่าลูกค้าคนนั้นไม่เชื่อ และจ้างคนมา 40 คนจริงๆ แล้วงานก็ไม่ราบรื่นสุดท้าย คนก็ลาออก แล้วเค้าก็จ้างคนมาแทน ทำอยู่อย่างนี้ถึง 4 ปี ถึงได้ ส่งมอบงานได้ช้าๆ ทีละ ซับโปรเจ็ค เล็กๆ

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

แ่ต่การใช้เงินเพิ่มก็สามารถลดแรงเสียดทาน ซึ่งทำให้ได้ เครื่องที่เร็วขึ้น คนเก่งมากขึ้น และอ๊อฟฟิศดีๆ

การควบคุมตัวแปรเวลานั้นมักจะมาจากภายนอก อย่างเช่น ปัญหา Y2K หรือการที่จะมีงานแสดงสินค้า ส่วนใหญ่จะมาจากลูกค้า ทำให้ผู้จัดการโปรเจ็คไม่สามารถควบคุมได้

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

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

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

จงโฟกัสที่ขอบเขตงาน

ขอบเขตงานเป็นตัวแปรที่หลายคนลืมไป แต่ความจริงแล้วมันเป็นตัวแปรที่สำคัญที่สุด การควบคุมมันได้หมายถึงการควบคุมตัวแปรที่เหลอได้ นักพัฒนาบ่นกันมาหลายสิบปีแล้วว่า “ลูกค้าไม่รู้ว่าตัวเองต้องการอะไร เราทำสิ่งที่เค้าบอกว่าต้องการ แต่เค้ากลับไม่ชอบมัน” ขอบเขตงานมันแปลกอย่างนี้เอง ความต้องการไม่เคยที่จะชัดเจนในตอนต้น ลูกค้าไม่มีทางบอกเราอย่างชัดเจนได้ว่าต้องการอะไร (เพราะเค้าไม่เคยเห็นมันมาก่อน – Steve Jobs) ตัวซอฟแวร์เองเป็นตัวการที่เปลี่ยนความต้องการ เมื่อลูกค้าเห็นงานรอบแรก เค้าจึงรู้ว่าเค้าต้องการอะไรในรอบสอง มันเป็นสิ่งที่คาดเดาล่วงหน้าไม่ได้ และเค้าคิดเองคนเดียวไม่ได้ เค้าจึงต้องการนักพัฒนาที่ไม่ใช่แค่ทำตามสั่งแต่เป็นคนที่เดินทางร่วมกันต่างหาก

ลองมองความคลุมเครือ ของขอบเขตเป็นโอกาส ที่จะเรียนรู้ เป็นโอกาสที่จะได้ทำงานเป็นชิ้นเล็กๆ ส่วนอะไรที่เรายังมองเห็นมันไม่ชัดเจนเราก็ผลักมันไปไว้ในรอบงานหน้า การที่เราไม่พยายามที่จะทำมากเกินไป(ในแต่ละรอบงาน) ทำให้เรามีโอกาสที่จะทำงานเล็กๆ ที่มีคุณภาพสูงได้ในเวลาที่กำหนด ซึ่งกระบวนการท่ำงานแบบนี้จะต้องรองรับการเปลี่ยนแปลงได้ง่ายๆ เพราะทิศทางมีโอกาสเปลี่ยนได้ตลอดเวลา อีกนั่นแหละเราคงไม่ต้องการจ่ายมากๆ กับของที่ไม่ได้ใช้หรอกนะ เราจึงต้องมีกระบวนการจัดการเรื่องนี้ที่ดี

การปรับเปลี่ยนขอบเขตได้เป็นสิ่งดี แต่ถ้าเราไม่ส่งมอบงานส่วนสำคัญที่เป็นที่ต้องการในตอนจบรอบแล้วล่ะก็ ลูกค้าคงไม่พอใจแน่ XP มีกลยุทธเพื่อป้องกันเรื่องนี้คือ

1. XP มีวิธีการที่จะประเมินได้อย่างดี และ ผลลัพธ์ของการทำงานจะถูกฟีดแบคกลับให้เราสามารถประเมินได้ถูกต้องมากขึ้นๆ ในทุกรอบงาน การประเมินที่ดี คือใกล้เคียงความจริงเท่าไหร่ ก็จะทำให้โอกาสทำไม่เสร็จตามเป้าลดน้อยลงเท่านั้น
2. เราทำงานที่มีความสำคัญกับลูกค้าที่สุดก่อน เพราะฉะนั้นถ้ามีบางอันไม่เสร็จ มันก็เป็นอันที่สำคัญน้อยกว่าอันที่เสร็จ

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 / เปลี่ยนแปลง )

Twitter picture

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

Facebook photo

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

Google+ photo

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

Connecting to %s