Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 1997

ว่าด้วยเรื่อง ความสิ้นเปลือง 7 อย่างในการพัฒนา software

$
0
0

inversion_wasteland_w1

inversion_wasteland_w1 จากหนังสือ 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 ประกอบไปด้วย

WastesOfSoftware1
  1. Partially Done Work
  2. Extra process
  3. Extra feature
  4. Task switching
  5. Waiting
  6. Motion
  7. 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 ? เอกสารที่ทำมีไว้เก็บแบบนี้หรือเปล่านะ ? documentation ลองคิดดูสิว่า ถ้าเราเขียน 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 หรือเปล่านะ ?blog-office-assistant

5. Waiting / Delay

มาจากคำว่า Waiting ใน Toyota Production System (TPS) หมายถึงการรอสิ่งต่าง ๆ ไม่ว่าจะเป็น
  • รอเริ่ม project
  • รอประชุม
  • รอ requirement ที่ชัดเจน
  • รอเอกสารที่ครบถ้วน
  • รอทีมอื่น ๆ ที่เกี่ยวข้อง
  • รอการพัฒนาให้เสร็จทุก ๆ feature
  • รอการ review
  • รอการ approve
  • รอการทดสอบ
  • รอการ deploy
การรอ และ delay สิ่งต่าง ๆ เหล่านี้มันคือ ความสิ้นเปลืองทั้งนั้น และดูเหมือนจะเป็นความสิ้นเปลืองที่เยอะมาก ๆ สำหรับการพัฒนา software เนื่องมาจากขั้นตอนการพัฒนาที่เทอะทะ เยอะเกินไป !! ดังนั้นเราควรลดขั้นตอนสิ้นเปลืองเหล่านี้ออกไป เพื่อส่งมอบของที่มีคุณค่าให้กับลูกค้า ให้บ่อยที่สุดเท่าที่จะเป็นไปได้ นั่นคือ การทำงานแบบ iterative และ incremental value นั่นเอง
ทางที่ดีที่สุด ในการจัดการสิ่งที่ไม่แน่นอน ก็คือ การส่งมอบบ่อย ๆ นั่นเอง

6. Motion / Flow

มาจากคำว่า Motion ใน Toyota Production System (TPS) คำถาม
  • เมื่อทีมพัฒนามีคำถามเกี่ยวกับ requirement ต้องใช้เวลานานเท่าไร กว่าจะได้คำตอบ ?
  • ถ้าเกิดมีปัญหาเชิงเทคนิค มีใครตอบได้บ้าง ?
  • มีลูกค้า หรือ ตัวแทนของลูกค้าคอยตอบปัญหา และ คำถามต่าง ๆ  ใกล้ ๆ หรือไม่ ?
  • จะรู้ผลการทดสอบได้อย่างไร ต้องเดินไปถามหรือไม่ ?
  • ทีมพัฒนาแยกกันทำงานคนละที่ คนละตึก คนละแผนก หรือไม่ ?
ถ้าใช้เวลานานในการตอบคำถาม ถ้าไม่มีใครคอยตอบคำถาม หรือ ปัญหา ถ้าต้องเดินไปมา เพื่อสอบถาม ถ้าแยกกันทำงาน ทั้งหมดนี่คือ ความสิ้นเปลือง ของการพัฒนา software ดังนั้น คำว่า การทำงานเป็น TEAM WORK สำคัญมาก ๆ ลดระยะทางของการติดต่อสื่อสารลงซะ ทั้งระหว่าง developer กับ developer ทั้งระหว่าง developer กับ tester ทั้งระหว่าง ทีม กับ ลูกค้า ไม่ใช่เพียงแค่คนเท่านั้น ที่ต้องเคลื่อนย้าย เอกสารต่าง ๆ ก็ต้องตามไปด้วย ซึ่งเราจะพบว่า เมื่อใดก็ตามที่เอกสารมันเคลื่อนย้าย คนจะต้องตามไปด้วย เนื่องจากเอกสารมันไม่เคยอธิบายได้เลย แปลกนะ แล้วเราจะทำเอกสารไปทำไม ? ถ้ามันไม่สามารถอธิบายสิ่งที่มันต้องการสื่อสารได้ ซึ่งนี่ก็คือ ความสิ้นเปลือง ที่พบมาก ๆ ในการพัฒนา software

7. Defects

มาจากคำว่า Defects ใน Toyota Production System (TPS) มันหมายถึง Bug, Error, Incident หรือความผิดพลาดต่าง ๆ ที่เกิดขึ้นมา โดยผลการทำงานไม่เป็นไปตามที่คาดหวังนั่นเอง ความสิ้นเปลือง ที่เกิดจาก defect มันมาจาก
  • ผลกระทบที่เกิดขึ้นจาก defect นั้น ๆ
  • เวลาในการหาต้นเหตุของ defect นั้น ๆ
  • เวลาในการแก้ไข defect นั้น ๆ
ถ้าใช้เวลาในการหา และ แก้ไข น้อย ๆ ก็ สิ้นเปลืองน้อย แต่ถ้าใช้เวลามาก ก็สิ้นเปลืองมาก ดังนั้น แทนที่จะเสียเวลาไปกับการหา defect เรามาแก้ไขที่ต้นเหตุของ defect ดีกว่าไหม ? เรามาแก้ไขเพิ่มหา defect ได้อย่างรวดเร็ว ดีกว่าไหม ? นั่นคือ เราควรมีการทดสอบอยู่บ่อย ๆ ทั้ง unit test ทั้ง integration test ทั้ง system test ทั้ง acceptance test ทั้ง user interface test ทำการ deploy และ release ให้เร็ว ให้บ่อยที่สุดเท่าที่จะทำได้ เพื่อลด ความสิ้นเปลือง เหล่านี้ลงไป

สุดท้ายแล้ว

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

Viewing all articles
Browse latest Browse all 1997

Trending Articles