จากหนังสือ Lean Software Development: An Agile Toolkit
ได้ทำการสรุปความสิ้นเปลือง 7 อย่างในการพัฒนา software ( 7 Wastes in Software Development )
นำมาจากความสิ้นเปลือง 7 อย่างจาก Lean ในโรงานอุตสาหกรรม
ซึ่งมีความน่าสนใจอย่างมาก
มาดูกันว่ามีอะไรบ้าง ?
มาดูกันว่าเราจะลด ความสื้นเปลือง เหล่านี้ได้อย่างไร ?
จากหนังสือ Lean Software Development ในหัวข้อ Seeing Waste
เขียนไว้ว่าอะไรก็ตามที่ทำไปแล้ว ซึ่งไม่ได้สร้างคุณค่าให้กับลูกค้าโดยตรง ถือว่า เป็นความสิ้นเปลือง (Waste) ทั้งหมดในปี 1970 นั้นคุณ Winston W. Royce เขียนไว้ในเอกสารวิชาการ เรื่อง Managing the Development of Large Software System ไว้ว่า
ขั้นตอนพื้นฐานในการพัฒนา software นั้น ประกอบไปด้วย Analysis และ Coding ส่วนขั้นตอนอื่น ๆ นั้นเป็นเพียงส่วนที่เพิ่มเข้ามา ถึงจะมีความจำเป็น แต่ไม่ได้ส่งผลโดยตรงต่อ Final product เหมือนกับ Analysis และ Coding แถมขั้นตอนอื่น ๆ เหล่านั้น ยิ่งทำให้ค่าใช้จ่ายในการพัฒนาสูงขึ้นด้วยดังนั้นผู้เขียนหนังสือจึงตีความใหม่ว่า
ทุก ๆ ขั้นตอนในการพัฒนา software ยกเว้น Analysis และ Coding ล้วนเป็นความสิ้นเปลืองทั้งนั้น !!สิ่งที่ควรถามกับตัวเราเอง ทีม และ องค์กร คือ ขั้นตอนต่าง ๆ ที่เราสร้างขึ้นมา สำหรับการพัฒนา software นั้น มันช่วยเพิ่มคุณค่าต่อลูกค้าหรือไม่ ? หรือมันช่วยทำให้คุณสบายขึ้นกันแน่ ?
ความสิ้นเปลือง 7 อย่างในการพัฒนา software ประกอบไปด้วย
- Partially Done Work
- Extra process
- Extra feature
- Task switching
- Waiting
- Motion
- Defect
1. Partially Done Work
มาจากคำว่า Inventory ใน Toyota Production System (TPS) คืองานที่อยู่ในกลุ่ม Work In Progress หรือ ยังไม่เสร็จนั่นเอง คืองานที่ไม่ได้มีคุณค่าอะไรเลย จนกว่าจะทำการ เสร็จจริง ๆ และ ทำการ deploy ไปยัง production server เช่น- ออกแบบเสร็จแล้ว แต่ยังไม่ coding
- coding เสร็จแล้วแต่ไม่ทำการทดสอบ
- ทดสอบเสร็จแล้วแต่ยังไม่ทำการ deploy
- ใช้เวลานานมาก กว่าจะรวม code หรือ merge code ซึ่งปัญหาที่ตามมากนั้นมากมายใช่ไหม ?
- มี code จำนวนมากที่ไม่ถูกทดสอบ หรือ ไม่ทำการเขียน unit test เลย นั่นคือ ก่อให้เกิด bug อยู่อย่างเสมอ
- code ที่มันแย่ ๆ และ code ที่ไม่สามารถอธิบายตัวมันเองได้
- code ที่ยังไม่ทำการ deploy สักที บางระบบอาจจะ deploy ปีละครั้ง !! มันมีความเสี่ยงสูงมาก ๆ เราชอบการ deploy แบบ Big Bang !! ผลที่ได้คือ ระบบตัวเองล่มยังไม่พอ ดันพาระบบอื่น ๆ ล่มไปอีกด้วย ผลเสียตกที่ใคร ?
- code และ feature ที่ไม่เคยให้ผู้ใช้งานเข้ามาใช้งานเลย นั่นคือ เรื่อง feedback ของงานที่สร้างขึ้นมา มันมีคุณค่า ประโยชน์ต่อลูกค้าหรือไม่ ?
- เอกสารที่ไม่เคยตรงกับ code เลย !!
แปลกนะว่า หลาย ๆ ทีม หลาย ๆ องค์กร ชอบความเสี่ยงเยอะ ทั้ง ๆ ที่ก็ทำ Risk management นะ !!
2. Extra process
มาจากคำว่า Extra processing ใน Toyota Production System (TPS) หมายถึง process หรือ activity ที่ไม่ได้เพิ่มคุณค่าให้กับ software หรือ product ที่พัฒนาเลย ดังนั้นลองตั้งคำถามไปยังทีมพัฒนา และ ตัวเราเอง ดูสิว่า มี process หรือ activity อะไรบ้างที่มันจำเป็นต่อ product ? มีเอกสารอะไรบ้างที่มันจำเป็นต่อ product ? เอกสารที่ทำมีไว้เก็บแบบนี้หรือเปล่านะ ? ลองคิดดูสิว่า ถ้าเราเขียน customer test หรือ Acceptance test มาแทนที่ requirement มันน่าจะดีกว่าไหมนะ ? มันจะช่วยลดงานเอกสารลงไปไหมนะ ? มันน่าจะช่วยเพิ่มคุณค่าให้กับ product หรือเปล่านะ ?มีกฎง่าย ๆ หนึ่งข้อ คือ Keep it short Keep it high level Keep it off line
3. Extra feature
มาจากคำว่า Over production ใน Toyota Production System (TPS) หมายถึง feature ต่าง ๆ ที่ถูกเพิ่มเข้ามาในระบบ ดูเหมือนว่า จะเป็นสิ่งที่ดี เพราะว่า เราสามารถเพิ่ม feature ได้เท่าที่เราต้องการ ซึ่งมันคือ การเพิ่ม code และเทคนิคใหม่ ๆ เข้ามายังระบบ แต่ในความเป็นจริงแล้ว สิ่งที่เราเพิ่มเข้าไปส่วนใหญ่มักจะเป็นความสิ้นเปลืองเสมอ เนื่องจากเมื่อใดก็ตาม ที่เราแตะต้อง code จะต้องทำการ compile จะต้องทำการ integrate จะต้องทำการ ทดสอบ จะต้องทำการ deploy จะต้องทำการ maintain และทุกครั้งที่เราเพิ่ม code เข้าไป เราได้เพิ่มความซับซ้อนของระบบขึ้นไปอีก และนั่นคือ ต้นกำหนดของสิ่งเล็ก ๆ ที่เรียกว่า BUG หรือก่อให้เกิดข้อผิดพลาดได้ ดังนั้น Developer ควรลดจำนวน code ที่ไม่จำเป็นออกไปบ้าง ถ้าไม่ยังไม่จำเป็นตอนนี้ ก็ไม่ต้องเผื่อไว้หรอกนะ4. Task switching
มาจากคำว่า Transportation ใน Toyota Production System (TPS) ในการให้คนคนหนึ่งทำงานหลาย ๆ project มันคือ บ่อเกิดความสิ้นเปลืองสุด ๆ ของการพัฒนา software ใครทำอยู่บ้าง ยกมือขึ้น ? การสลับไปทำงานแต่ละ project มันย่อมเสียเวลา และเวลาการทำงานแต่ละ project มีขอบเขตอีกด้วย ดังนั้น คุณค่าที่จะส่งมอบได้รวดเร็วไหม ? มันขัดแย้งกับ Lean principle ที่บอกไว้ว่า Deliver as fast as posible ซึ่งเคยเขียนอธิบายไว้ใน blog เรื่อง Developer ทำงานช้า ! ตอนนี้คุณเป็น Multi-Tasker หรือเปล่านะ ?5. Waiting / Delay
มาจากคำว่า Waiting ใน Toyota Production System (TPS) หมายถึงการรอสิ่งต่าง ๆ ไม่ว่าจะเป็น- รอเริ่ม project
- รอประชุม
- รอ requirement ที่ชัดเจน
- รอเอกสารที่ครบถ้วน
- รอทีมอื่น ๆ ที่เกี่ยวข้อง
- รอการพัฒนาให้เสร็จทุก ๆ feature
- รอการ review
- รอการ approve
- รอการทดสอบ
- รอการ deploy
ทางที่ดีที่สุด ในการจัดการสิ่งที่ไม่แน่นอน ก็คือ การส่งมอบบ่อย ๆ นั่นเอง
6. Motion / Flow
มาจากคำว่า Motion ใน Toyota Production System (TPS) คำถาม- เมื่อทีมพัฒนามีคำถามเกี่ยวกับ requirement ต้องใช้เวลานานเท่าไร กว่าจะได้คำตอบ ?
- ถ้าเกิดมีปัญหาเชิงเทคนิค มีใครตอบได้บ้าง ?
- มีลูกค้า หรือ ตัวแทนของลูกค้าคอยตอบปัญหา และ คำถามต่าง ๆ ใกล้ ๆ หรือไม่ ?
- จะรู้ผลการทดสอบได้อย่างไร ต้องเดินไปถามหรือไม่ ?
- ทีมพัฒนาแยกกันทำงานคนละที่ คนละตึก คนละแผนก หรือไม่ ?
7. Defects
มาจากคำว่า Defects ใน Toyota Production System (TPS) มันหมายถึง Bug, Error, Incident หรือความผิดพลาดต่าง ๆ ที่เกิดขึ้นมา โดยผลการทำงานไม่เป็นไปตามที่คาดหวังนั่นเอง ความสิ้นเปลือง ที่เกิดจาก defect มันมาจาก- ผลกระทบที่เกิดขึ้นจาก defect นั้น ๆ
- เวลาในการหาต้นเหตุของ defect นั้น ๆ
- เวลาในการแก้ไข defect นั้น ๆ