Waterfall .. Iterative .. Agile เลือกใช้อะไรดี?
How To Put The Right Methodology To The Right Job
ถ้าถามว่าผมรู้จัก Waterfall ตั้งแต่เมื่อไร? … นานแล้วครับ เป็นเพื่อนสนิทกันตั้งแต่สมัยเรียนปี 4 เลย ก็ตอนทำ Project จบนั่นไง จะว่าไปก็เหมือนจำใจนิดหน่อยนะครับในเมื่อช่วงเวลานั้นมีเพื่อนให้เลือกคบอยู่ไม่กี่คน Waterfall หรือไม่ก็ Iterative อะ แถมให้อีกคน Spiral
ที่เลือก Waterfall ก็เพราะดูเป็นคนดีจัง ตรงไปตรงมาครับ บอกว่าจะทำอะไรก็ทำให้เสร็จก่อนจะเริ่มงานต่อไป อ่านง่าย เข้าใจง่าย แล้วทำไมผมไม่เลือกเพื่อนอีกสองคนหละ? ก็ Iterative ดูเหมือนถ้าทำงานด้วยแล้วมันซ้ำไปซ้ำมาครับ บอกว่าออกแบบระบบเสร็จแล้วนะ เราก็หลงดีใจ แต่ไปๆมาๆ กลับมาออกแบบอีกละ งงจัง สุดท้าย Spiral เห็นแล้วคบไม่ได้เลยครับ ดูแล้วมึนมากๆ คนอะไรคดเคี้ยวเลี้ยวไปเลี้ยวมาเป็นก้นหอยเลย
Waterfall เป็นเพื่อนที่ดีของผมมากๆครับ อย่างน้อยก็ช่วยให้ผมเรียนจบปริญญาตรีแหละน่า พอมาเริ่มทำงานใหม่ๆ เราก็ยังสนิทกันดีนะครับ อะไรๆก็ลงตัวไปหมด จนวันเวลากับหน้าที่การงานของผมผ่านเลยมาประมาณ 3 ปี ผมรู้สึกว่าผมเริ่มมองเพื่อนรักคนนี้เปลี่ยนไปครับ ไม่แน่ใจว่า “ฉันหรือเธอที่เปลี่ยนไป” ครับ ผมเริ่มรู้สึกว่าเราเข้ากันไม่ได้ จากที่ผมเคยพึ่งพา Waterfall ได้เต็มที่ก็เริ่มจะมีปัญหาจนทำให้ผมส่งงานไม่ทันตามกำหนด
จากที่ไม่เคยคิดมองหาเพื่อนคนอื่น ผมต้องเปลี่ยนความคิดนั้นครับ ผมหันมามอง Iterative ที่ยืนมองสถานการณ์ระหองระแหงของผมกับ Waterfall อยู่ห่างๆ เมื่อลองศึกษาดูใจกันอีกซักครั้ง ผมคิดว่าเอ้อ … เรากับ Iterative ก็น่าจะไปกันได้ดีนะเนี่ยะ เอาวะ … ลองดู ไม่มีอะไรจะเสียอยู่แล้ว ผมประกาศของพักความสัมพันธ์กับ Waterfall ชั่วคราวเพื่อหันมาคบกับ Iterative อย่างจริงจัง (อย่าหาว่าผมหลายใจเลยนะ) ปรากฎว่า WORK!!! เข้ากันได้ดีเป็นปี่เป็นขลุ่ย สั่งซ้ายได้ซ้าย สั่งขวาได้ขวา งานผมเสร็จตรงตามเวลาตลอดเลยครับ ตอนนั้นปลื้มจริงๆ เล่นเอาลืม Waterfall ไปเสียสนิทเลย
ผมร่วมทุกข์ร่วมสุขกับ Iterative มา 3 ปี … ตอนนั้นความรู้สึกเดิมๆกลับมาเยือนผมอีกครั้งอย่างไม่ตั้งใจ ทำไมผมถึงรู้สึกเปลี่ยนไป ทำไมผมมองว่า Iterative ไม่เข้าใจผม ไม่ช่วยกันทำงานให้ได้ดีเหมือนเดิม หรือว่ามันถึงเวลาที่ผมต้องเลือกตัดใจเลือกอีกครั้ง? ผมมองไปทางซ้ายเจอ Spiral โห ให้ตายเหอะ … ยังไงก็ไม่เอา มันวนไปวนมา มึนๆๆ มองไปทางขวา เอ๊ะ นั่นใครยืนอยู่ที่มุมทางเดินห้อยป้ายชื่อ Agile ไว้ตัวเบ้อเริ่มเลย ผมคิดในใจชื่อไม่เท่ห์เลยอะ ผมกะว่าจะไม่สนใจแล้วนะ แต่มีเสียงแนะนำจากเพื่อนๆไม่ขาดสายให้ผมเปิดใจหน่อย ดูคนอย่าดูแต่ภายนอก … อะๆ ก็ได้ๆ ลองดู
เหมือนเดิมครับ Agile กลายมาเป็นเพื่อนที่ดีของผมตั้งแต่ตอนนั้นจนถึงตอนนี้ ส่วน Iterative หนะหรอ? ผมเก็บเข้า Collection ไปไว้ข้างๆ Waterfall เรียบร้อย ถึงตรงนี้ผมรู้สึกผิดมั้ยที่ทำกับเพื่อนที่ซื่อสัตย์ทั้งสองคนได้ลงคอ? ก็รู้สึกอยู่เหมือนกันครับ ผมเลยลองนั่งคิดทบทวนไปว่า ใครเปลี่ยนไป? ผมหรือ Waterfall กับ Iterative ผิด? … คำตอบที่ผมได้มาคือสิ่งแวดล้อมรอบข้างต่างหากที่เปลี่ยนไป
อะไรที่เปลี่ยนไปบ้าง ประสบการณ์ของตัวผมและทีมงาน ความต้องการของลูกค้า ความเร่งด่วนของงาน มีผลทั้งทำให้ความคิดของผมเปลี่ยนไปทั้งนั้นเลยครับ ผมคิดว่าการจะเลือกคบเพื่อนดีๆซักคนเป็นเรื่องที่ … ไม่ยาก ไม่ง่ายนะ ถ้าเรามีหลักการเลือกคนที่จะมาร่วมคิดร่วมงานที่ดี
โชคดีครับที่ผมรู้แล้วว่ากับ Software Development Project เราไม่จำเป็นต้องเลิกคบเพื่อนหนึ่งคนเพื่อมาหนุงหนิงกับเพื่อนอีกคน … เราเป็นเพื่อนได้กับทุกคนแหละ อยู่ที่ว่าสถานการณ์ปัจจุบันนี้ เราควรจะเดินไปขอคำปรึกษา ขอความช่วยเหลือจากใคร
จากประสบการณ์ของผม ผมมีหลักการเลือกเพื่อนดังนี้ครับ
1. Requirement Stability
ความแน่นอนของ Requirement เป็นปัจจัยหลักเลยที่ผมใช้ในการตัดสินใจเลือกเพื่อนร่วมทางครับ มันสำคัญยังไง สำคัญตรงที่ถ้า Requirement ใน Project ของเรามีความไม่แน่นอน ไม่สมบูรณ์ ไม่ชัดเจนแล้วเราจะเลือก Waterfall ก็คงเป็นเรื่องที่ไม่ดีแน่ๆครับ เพราะว่าคุณ Waterfall เค้าค่อนข้างจะมีความเป็นตัวของตัวเองสูง ไม่ค่อยจะยอมยืดหยุ่นให้กับใครซักเท่าไร ระหว่าง Coding อยู่แล้วเกิด Requirement Change ขึ้นมา จะขอคุณ Waterfall กลับไปทำ Design ใหม่ ผมกลัวว่าเค้าจะไม่ยอมนะครับ
ผิดกับคุณ Iterative กับ Agile เลยครับ สองคนนั้นยืดหยุ่นเต็มที่ ยิ่งคุณ Agile นะเค้าชอบมากเลย Change เนี่ยะ
2. Requirement Dependency
ความเกี่ยวพันกันของ Requirement นั้นจะมองเห็นภาพชัดเจนก็เมื่อมี Requirement Stability สูงครับ แล้วเพื่อนคนไหนเหมาะกับ Project ที่มี Requirement พันกันให้ยุ่งเหยิงไปหมดละ ตรงนี้ผมคิดว่าคุณ Waterfall ได้เปรียบนะครับเพราะว่าถ้าเรามองเห็นภาพของงานที่ชัดเจนแล้ว
การเลือกคุณ Waterfall มาเป็นเพื่อนจะเป็นการทำงานที่มีกระบวนการที่ชัดเจน ทำทีเดียวเสร็จในแต่ละ Phase ซึ่งจะเป็นการจัดการความเกี่ยวพันกันของ Requirement ได้ดีกว่าการเลือกคุณ Iterative หรือคุณ Agile ตัวอย่างเช่น ถ้าเราเลือก Iterative ระหว่างทำงานอยู่ใน Iteration ที่ 5 เกิดเจอปัญหาที่ส่งผลไปถึง Requirement ที่เสร็จไปแล้วใน Iteration ที่3 แบบนี้เราจะทำยังไงดี? ก็โอเคหละว่าเจอปัญหาก็ต้องแก้ แต่เราจะเสียเวลามากขึ้นในส่วนที่เป็น Overhead (เช่น Planning) ของ Project เมื่อเทียบกับ Waterfall ครับ
3. Staff Discipline
อย่างที่รู้กันครับว่าคุณ Waterfall เป็นคนที่มีระเบียบวินัยสูงปรี๊ด แต่แปลกครับ แปลกที่เค้าชอบคบกับคนที่ไม่ค่อยจะมีกฎมีเกณฑ์ แถมไม่คบเปล่านะ ชอบจะสั่งสอนให้เรากลายเป็นคนมีระเบียบวินัยมากขึ้นด้วยซ้ำ ถ้าเพื่อนๆคิดว่าจะคุมตัวเองไม่ได้เวลาทำงานใน Project ลองพิจารณาคบคุณ Waterfall ไว้เป็นเพื่อนซักคนครับ รับรองไม่ผิดหวัง เพื่อนๆจะได้รู้กฎเกณฑ์ ขั้นตอนที่ถูกต้องสำหรับ Software Development Project เลย
อะ แต่ถ้าเพื่อนๆเป็นคนมีระเบียบวินัยพอสมควรอยู่แล้ว (ผมเองก็เริ่มมีระเบียบขึ้นหลังจากคบกับคุณ Waterfall นี่แหละ) จะปันใจมากหาคุณ Iterative ก็ได้นะครับ คนๆนี้ค่อนข้างจะยืดหยุ่น ใจดี ตามใจเราในหลายๆเรื่อง บางครั้งอยู่กับคุณ Iterative ก็สบายใจดีครับ เราสามารถปรับเปลี่ยนตัวเองให้เหมาะสมกับสถานการณ์ต่างๆของ Project ได้อย่างคล่องตัวทีเดียว
สุดท้ายถ้าเพื่อนๆและทีมงานเป็นคนที่มีความรับผิดชอบสูงมากกกก รู้หน้าที่ มีวินัย ใฝ่คุณธรรมแบบสุดๆ ผมแนะนำว่าให้ติดต่อคุณ Agile เลยครับ คนนี้ใจดีแบบสุดตัว เราอยากได้อะไร อยากเปลี่ยนแปลงงานตรงไหน ได้หมดครับ อยู่ด้วยแล้วสบายใจไม่มีปัญหากับเค้าเลย แต่ แต่ แต่ … ต้องถามตัวเองให้หนักๆนะครับว่า คุณมีความรับผิดชอบสูงพอ เพราะด้วยความใจดีของคุณ Agile เค้าจะไม่ค่อยมาเจ้ากี้เจ้าการให้เราทำนู่นทำนี่หรอกนะ (ไม่โหดแบบคุณ Waterfall) ถ้าเราขี้เกียจ ไม่รับผิดชอบหละก็ รับรองได้ว่าพากันลงเหวทั้งคู่ชัวร์ครับ
4. Staff Experience
เอาหละ ถ้าพูดถึงเรื่องงานหละ เพื่อนคนไหนเหมาะกับเราบ้าง? คนแรกเจ้าเก่า คุณ Waterfall ถ้าเพื่อนๆไม่มีประสบการณ์ในงานของตัวเองเท่าไรทั้งในเรื่อง Technical และ Process เลือกคบคุณ Waterfall ไปเถอะครับ เค้าจะช่วยให้เพื่อนๆทำงานได้อย่างสบายใจ (พอสมควรเลย) เพราะอะไร ก็เพราะว่าเราจะได้ทำงานอย่างเป็นขั้นเป็นตอน ถ้าในแง่ของ Technical เราจะมีเวลาทำ Requirement -> Design -> Coding -> Testing ทีละอย่าง ทำให้เรามีสมาธิเต็มที่ในการคิดและวิเคราะห์งานในส่วนนั้นอย่างละเอียดละออซึ่งจะช่วยลดปัญหาที่จะเกิดขึ้นได้เยอะเหมือนกันครับ
ถ้าเพื่อนๆทำงานมาซักระยะนึงแล้ว มีความรู้ในตัวงานมากขึ้นจนมั่นใจระดับหนึ่งและต้องการความยืดหยุ่นในการทำงานมากขึ้น ผมคิดว่าเพื่อนๆก็พร้อมที่จะมองมาที่คุณ Iterative แล้วหละครับ เค้าจะใจดีให้เพื่อนๆแบ่งทำ Requirement -> Design -> Coding -> Testing หลายๆรอบซึ่งเหมาะกับ Project ที่ต้องส่งงานให้ลูกค้าดูอยู่เรื่อยๆตรงนี้ต้องมั่นใจนะครับว่าเรามีความรู้ในงานดีพอตัวเพราะว่าการตัดแบ่งว่า Requirement ไหนควรทำการทำหลัง ทำใน Iteration ไหนเป็นเรื่องที่ใช้ประสบการณ์เยอะเลยหละ
สุดท้ายถ้าเพื่อนๆมั่นใจว่าฉันเชี่ยวชาญระดับ “ป๋า” แถมประสบการณ์บอกเพื่อนๆว่า “Project นี้ต้องมี Changes เยอะแน่ๆ” ผมแนะนำให้ยกหูหาคุณ Agile ทันทีเลยครับ เค้าเก่งมากเลยเรื่อง Incremental Release และ Change Management เนี่ยะ รับรองได้ว่าลูกค้าจะได้ดูความคืบหน้าของงานอย่างบ่อยเลยครับ Change หรอ? … มาเหอะ เดี๋ยวคุณ Agile จัดการให้ เค้ามีกระบวนการจัดลำดับความสำคัญของงานที่ดี มีความยืดหยุ่นในการโอนย้ายถ่ายงานจาก Iteration หนึ่งไปอีก Iteration หนึ่งได้อย่างยอดเยี่ยมครับ
5. Customer Review
ถ้าลูกค้าของเพื่อนๆอยากเห็นความคืบหน้าของงานบ่อยๆเราทำยังไงดีครับ? เอาแบบสุดยอดเลยนะ คุณ Agile ครับเหมาะมากๆ เค้าจะสอนให้เราแบ่งงานออกเป็นงานย่อยๆ (User Story) แล้วพยายามทำให้เสร็จภายในระยะเวลาสั้นๆ (Iteration) งานนี้ต้องเสร็จสมบูรณ์ชนิดที่เรียกว่าส่งให้ลูกค้าใช้งานได้จริงเลยนะครับ ข้อดีก็คือเมื่อส่งงานบ่อยเราจะได้ Feedback บ่อย จริงอยู่ครับ Feedback ก็อาจจะหมายถึง Change นั่นแหละ แต่เรื่องแบบนี้ยิ่งรู้เร็วยิ่งดีครับ เราจะมีเวลาปรับปรุงแก้ไขได้ทันท่วงที ดีกว่าไปได้ Feedback ตอนเหลือ 2 สัปดาห์จะต้องส่งงานนี่ … ตัวใครตัวมันเลยนะครับ
นอกจาก Feedback แล้ว ถ้าลูกค้าถูกใจงานที่เราส่งให้ไป … เราเก็บเงินเค้าได้ด้วยนะเออ หัวหน้าเราต้องปลื้มแน่ๆเลยครับ
ในกรณีนี้การเลือกคบคุณ Iterative ก็เป็นทางเลือกที่ไม่เลวนะครับ เค้าช่วยเราได้พอตัวเลย (อาจจะไม่ถึงขนาดคุณ Agile) ถ้าทีมงานของเรายังไม่ “ป๋า” มากนัก เค้าจะช่วยให้เราส่งงานให้ลูกค้าดูได้อย่างต่อเนื่องโดยไม่เสียคุณภาพของงานไปครับ
สุดท้ายที่ไม่แนะนำก็คือคุณ Waterfall เฮ้อ คนนี้เค้าเจ้าระเบียบครับ ลูกค้าส่ง Requirement มาให้เราแล้ว … อยากเห็นความคืบหน้าหรอ? นู่นนน กว่าจะ Testing เสร็จก็รอไปเกือบจบ Project เลยหละครับ ไม่เหมาะอย่างยิ่ง
อย่างที่ได้เกริ่นไว้ตอนต้นครับว่า สิ่งที่เปลี่ยนไปคือลักษณะงานของเรา ไม่ใช่ตัวเราหรือเพื่อนๆทั้งสามคนนั้นเลย ถึงตรงนี้ก็อยู่ที่ว่าใครจะเลือกเพื่อนคนไหนมาร่วมงานด้วยครับ
ผมเขียนบทความนี้เพราะอยากเปลี่ยนแปลงสิ่งที่เป็นอยู่ในอุตสาหกรรมการผลิตซอฟท์แวร์ให้ดีขึ้นตามความเชื่อและประสบการณ์ของผม ถ้าเพื่อนๆเชื่อในแนวทางเดียวกัน เรามาช่วยกันคนละไม้คนละมือทำให้สังคมของเราดีขึ้นครับ จะแชร์บทความนี้ผ่าน Social Network หรือจะแบ่งปันเรื่องราวนี้ให้คนที่นั่งข้างๆฟังบ้างก็ได้
The Future Has Arrived — It’s Just Not Evenly Distributed Yet, William Gibson
อนาคตอยู่ตรงนี้แล้ว เรามีหน้าที่ต้องถ่ายทอดมันออกไปให้คนอื่นได้สัมผัสสิ่งดีๆร่วมกันครับ