Lean Software Development (LSD)
” ประวัติของ คำว่า Lean “
- Lean คือระบบของกระบวนการผลิตที่เน้นการ จัดการความสิ้นเปลืองในการผลิต เพื่อให้การผลิตมีประสิทธฺภาพสูงสุด
- การใช้ทรัพยากรเพื่อประโยชน์อื่นนอกจากการสร้างสิ่งที่มีมูลค่า ถือว่าเป็นสิ่งที่สิ้นเปลื่อง
- สิ่งของหรือกระบวนการใด ๆ จะถือว่ามีมูลค่า ก็ต่อเมื่อลูกค้ายอมจ่ายเพื่อสิ่งนั้น
Lean มีแนวคิดอยู่ 7 ประการ และมีเครื่องมือ (tools) ในการปฏิบัติทั้งหมด 22 อย่าง ดังต่อไปนี้
- Eliminate waste : กำจัดความสิ้นเปลือง
ความสิ้นเปลือง ได้แก่
- สิ่งที่ไม่สามารถเพิ่มมูลค่าให้กับผลิตภัณฑ์
- ฟังก์ชันที่ไม่จาเป็น
- requirement ที่ไม่ชัดเจน
- การสื่อสารและกระบวนการทำงานภายในองค์กรที่ช้า
# TOOL 1 : Learn to see wastes (มองหาความสิ้นเปลือง)
– งานที่ทำเสร็จไปแล้วบางส่วน (partially done work
– งานเอกสาร และเอกสารเพิ่มเติม
– ฟีเจอร์อื่นๆเพิ่มเติม
– การสร้างสิ่งที่ผิดจากความต้องการ
– การรอข้อมูลที่จะนามาใช้ทางาน
– การสับเปลี่ยนงานที่ทำอยู่
– ข้อบกพร่องในซอฟต์แวร์
# TOOL 2: Learn to reduce waset ( เรียนรู้ที่จะลดความสิ้นเปลือง )
– สร้าง value stream mapping เพื่อหาสิ่งที่ลดประสิทธิภาพของการผลิต
– ถามคำถามกับตัวเองเสมอว่า เรากาลังทำสิ่งๆนั้นไปเพื่ออะไร
– ตัดกระบวนการด้านบริหารจัดการที่ไม่จำเป็นออก และมีการออกแบบกระบวนการที่มีประสิทธิภาพทดแทน
2. Amplify Learning
หลักการเบื่องต้นที่นำพาสู่การ เรียนรู้ความต้องการลูกค้า
- พยายามมุ่งเน้นไปที่จุดประสงค์ของการใช้งานที่แท้จริง
- พยายามหาวิธีที่จะแก้ไขปัญหาใหม่ๆ
- พยายามออกแบบโดยใช้หลักการทดลองทำโดยใช้ระยะเวลาสั้นๆในการพิสูจน์
- การตอบรับจากลูกค้าในแต่ละรอบ เป็นสิ่งสำคัญ
# Tool 3 ใช้ Feedback เป็นหลักในการพัฒนา
- พยายามสร้าง และ เพิ่มผลตอบรับจากลูกค้า ระหว่างการพัฒนาให้มากที่สุด
- พยายามทดสอบระบบให้บ่อยที่สุด อย่าทำให้ปัญหามันสะสม
- ยอมรับความคิดเห็นจากลูกค้า นำมาวิเคาระห์ แล้วกลับไปแก้งานให้เร็วที่สุด
- ไม่ควรมีการเก็บ requirement สำหรับ UI ในเวอร์ชั่นทดลอง
#Tool 4 : Iteration
- Iteration คือ วงจรของการพัฒนาซอฟแวร์ ซึ่งประกอบไปด้วย
- Design > Programmed > Tested > Integrated > Delivered - ซึ่งทำให้ ได้รับผลตอบรับจากลูกค้ามากขึ้น ทำให้เราสามารถจัดการงานได้มีประสิทธิภาพมาก ขึ้น
- ทำให้ ไม่ต้องรีบด่วนตัดสินใจในประเด็นต่างๆ ซึ่งอาจจะทำให้ตัดสินใจพลาดได้ เพราะเรา สามารถทราบผลการตัดสินใจได้ตลอดเวลาที่จบ iteration
- การจะทำ Iteration จำเป็นต้องมี การวางแผนเป็นทีม และ พยายามวนรอบ iteration ให้ถี่ที่สุด และ สิ่งสำคัญคือต้องการความร่วมมือกันของคนในทีม
- สามารถทำให้ทีมจัดการงานได้อย่างยืดหยุ่น และ พอใจทุกฝ่ายมากที่สุดเท่าที่จะทำได้ และยึดหลักทำสิ่งที่สำคัญที่สุดก่อนเป็นสำคัญ
- การวนรอบเพื่อรับผลตอบรับจากลูกค้าบ่อย ทำให้งานที่ออกมาตรงตามที่ลูกค้าต้องการมาก ที่สุด และงานสามารถพัฒนาไปในเส้นทางที่ถูกต้อง
#Tool 5 Synchronization
- คือการทาให้การพัฒนาส่วนใดๆ ที่มีผู้เกี่ยวข้องหลายๆคน สามารถเข้าใจจุดประสงค์ของงานที่ ตรงกัน เพื่อกาจัดปัญหาความเข้าใจคลาดเคลื่อน
- ควรทำการ automated test ทำการตรวจสอบปัญหาตั้งแต่ตอนที่มันเกิดขึ้น เพราะมันอาจ ทำให้เกิดปัญหาที่ใหญ่ขึ้นเรื่อยๆได้ และ ที่สาคัญคือ ช่วยในเรื่องความเข้าใจตรงกันของ นักพัฒนา ที่อาจทำให้เกิดปัญหา แต่ละส่วนในการพัฒนาเข้ากันไม่ได้
- ควรทำการรวมงานของคนทั้งทีมเข้าด้วยกันทุกวัน และ ร่วมงานข้ามทีมอย่างน้อยสัปดาห์ละ ครั้ง
#Tool 6 : Set Base Development
-
คือการนำปัญหามาวิเคราะห์ แล้วพยายามคิดการแก้ปัญหาในหลายๆทาง แล้วอภิปรายถึง ผลดีผลเสีย หลังจากนั้นทาการคานึงถึงข้อจากัดต่างๆในการพัฒนา แล้วเลือกวิธีการแก้ปัญหา ที่ดีที่สุด
3 Decide ad Late as Possible
- ไม่ใช่การผัดวันประกันพรุ่ง แต่เป็นการคงตัวเลือก คงการตัดสินใจที่เด็ด ขาดไว้เท่าที่ จะทำได้ แต่อย่าปล่อยให้อะไรไม่ชัดเจนนานเกินไป
- ปัญหาส่วนมากของการพัฒนาซอฟแวร์แบบเป็นขั้นตอนตามปรกติ คือการลง รายละเอียดเร็วเกินไป เรียกว่า “ depth-first ”ซึ่งสิ่งที่ควรจะทำคือ “ breadth – first ” นั่นคือพยายามมองเป็น ภาพรวมก่อนที่จะลงรายละเอียดลึกๆ
- เหตุผลที่ต้องทำการมองภาพรวมก่อน เพราะความต้องการของลูกค้ามักจะไม่คงที่ และลูกค้าบางคนจะยังไม่รู้สิ่งที่ตัวเองต้องการ จนกว่าจะได้เห็นผลงานจริงๆ
#Tool 7: Options Thinking
-
- การสร้างรายละเอียดแผนงาน (Detailed plans) เป็นการสร้างการตัดสินใจให้มั่นคง
-
การวางแผนและทำนาย ไม่ใช่สิ่งที่ไม่ดี แต่ควรสร้างแผนที่สามารถเปลี่ยนแปลงได้อยู่เสมอ
#Tool 8 The Last Responsible
- ช่วงเวลาที่ใช้ในการตัดสินใจในการเลือกจัดการสิ่งทำสิ่งที่ต่าง ๆ
-
ไม่ใช่การผัดวันประกันพรุ่ง
# Tool 9 Making Decisions ส่วนใหญ่การตัดสินใจโดยสังหรณ์ใจสาคญักว่าการตัดสินใจแบบสมเหตุสมผล
Depth First
Breath First
สร้างขอ้ตกลงร่วมกันตั้งแต่แรกๆ
ทาให้ข้อตกลงร่วมกันลา้ช้า
ตัดสินใจด้วยเหตุผล
ตัดสินใจด้วยสัญชาตญาณ
ใช้การทานายและสมมติฐานเป็นหลักในการ ตัดสินใจ
ใช้ข้อมูลทันสมัยและกระแสตอบรับในการ ตัดสินใจ
4 Deliver as fast as possible
ทำไมต้องส่งมอบให้เร็ว ?
- ลูกค้าชอบงานทำงานส่งมอบอย่างรวดเร็ว ดูตัวอย่างของ UPS และ FedEx ส่งมอบสินค้าให้ลูกคา้ได้ภายในสามวัน
- การส่งมอบที่รวดเร็วหมายถึงเวลาที่น้อยลงในการเปลี่ยนใจของลูกค้า
- อาจเผยให้เห็นข้อบกพร่องของงานที่เสร็จเพียงบางส่วน หรืองานที่กำลังทำอยู่ได้
- ยิ่งส่งมอบเร็วเท่าไร ยิ่งเลื่อนการตัดสินใจของลูก ค้าได้มากเท่านั้น การที่สามารถสร้างความเปลี่ยนแปลงได้ภายในหนึงสัปดาห์ ทำให้สามารถรอการตัดสินใจจนกว่าจะถึง สัปดาห์นั้น ๆ ได้
# Tool 10 Pull Systems
-
-
-
- ทำให้ผู้คนสามารถคิดออกได้ว่าอะไรที่ต้องทำให้เสร็จ งานจะกำหนดทิศทางด้วยตัว ของมันเอง
- งานที่มีความซับซ้อนสูงสามารถตกลงให้เหลือเพียงเส้นตรงได้เมื่อมีการยกตัวอยา่งถึง รูปแบบงานที่ทำให้เกิดปัญหาขึ้นได้
-
แนวทางการตัดสินใจขณะที่ทำงานทำให้การตัดสินใจเป็นการตัดสินใจที่เกิดขึ้นใน ปัจจุบัน ไม่ใช่การตัดสินใจล่วงหน้า
# Tool 11 Queueing Theory
หัวใจหลักก็คือการลดเวลาของแต่ละ cycle หรือเวลาที่ใช้ในการดาเนินการตั้งแต่จบกระบวนการหนึ่งถึงอีกกระบวนการหนึ่ง
#Tool 12 Cost of Delay
- การทำงานแบบ Rapid development ช่วยให้ประหยัดเวลาและคา่ ใช้จ่ายแต่ฝ่ายบริหารอาจจะไม่คิดเช่นนั้น
- ตัดสินใจว่าอะไรที่ส่งมอบช้าแล้วจะทำให้ต้องเสียค่าใช้จ่ายเพิ่มโดยใช้บัญชีรายรับ รายจ่าย
- สร้างแบบจาลองทางด้านเศรษฐกิจของแอปพลิเคชัน
- ใช้บัญชีรายรับรายจา่ยและแบบจาลองทางเศรษฐกิจเพื่อช่วยในการตัดสินใจ
-
-
5 Empower the Teamอะไรเป็นองค์กรที่เติบโตแล้ว ?
-
-
-
-
- สมมติฐาน 1 : องค์กรที่โตแล้วจะสนใจระบบทั้งหมดขององค์กร ไม่ได้มุ่งเน้นเป็นจุดย้อยๆในองค์กร
- สมมติฐาน 2 : องค์กรที่โตแล้วจะมุ่งเน้นไปที่การเรียนรู้อย่างมีประสิทธิภาพ และการเพิ่ม ความสามารถของคนที่จะต้องตัดสินใจ
-
-
-
#Tool 13 : Self-Determination
-
-
-
-
- ไม่ควรนำวิธีการปฏิบัติของที่ๆหนึ่งไปใช้กับอีกที่ๆหนึ่ง
- ให้คนในกลุ่มทุกคนช่วยกันออกแบบขั้นตอนการทางานของกลุ่ม
- ต้องเข้าใจหลักการพื้นฐานของการทางาน เพื่อที่จะทาไปสร้างข้อปฏิบัติของแต่องค์กร
- ฝ่ายบริหารต้องคิดอยู่เสมอว่าหน้าที่ของตน คือ ให้คาแนะนำ สอน และช่วยเหลือคนในกลุ่ม
- ผู้บริหารจำเป็นที่จะต้องพัฒนาตัวเองให้มากเหมือนกับพนักงานบริษัททั่วๆไป โดยการหมั่นดูผล
-
-
-
#Tool 14: Motivation (แรงจูงใจ)
- ต้องสนใจจุดประสงค์ของงานมากกว่าสนใจตัวเอง
- จะต้องมีความชัดเจน
- จะต้องประสบความสาเร็จ
- ทีมจะต้องมีการบริการลูกค้า
- ทำให้มันเป็นความมุ่งมั่นของตัวพวกเขาเอง
- หน้าที่ของฝ่ายบริหารคือ ให้การสนับสนุนทีมในเรื่องทรัพยากร คอยให้คาแนะนาลูกทีมและคอยคุ้มครองพวกเขา
++++++The building blocks (การสร้างแรงจูงใจ)+++++++++
ทุกคนจะต้องมีความชัดเจนในงานที่ต้องทา และมุ่งมั่นที่จะทางานให้ประสบความสาเร็จ ร่วมกัน ถ้าแพ้ก็แพ้ด้วยกัน ถ้าชนะก็ชนะด้วยกัน
- เครื่องป้องกัน (safety) (พยายามอย่าทำให้ทีมหมดกาลังใจ)
- ความมีประสิทธิภาพ และความมีวินัย (เป็นแรงจูงใจที่ดีมากที่ได้เป็นส่วนหนึ่งของทีมที่ชนะ และทำให้มีความมั่นใจในการทำงาน
#Tool 15 : Leadership (ความเป็นผู้นา)
Managers |
Leaders |
จัดการกับความซับซ้อน |
จัดการกับการเปลี่ยนแปลง ƒ – กาหนดทิศทางของงาน ƒ -จัดคน |
# Tool 16 : Expertise (ความชำนาญ)
* ให้ทีมได้มีโอกาสมีส่วนร่วมกับกลุ่มคนที่มีความเชี่ยวชาญในด้านต่างๆ เช่น เข้าร่วมการสัมนาอบรม ต่าง ๆ
* ส่งเสริมให้เกิดการพัฒนาตัวเองของคนในทีม
6 Build Integrity In – สร้างความสมบูรณ์ของซอฟต์แวร์
- #Tool 17 Perceived Integrity – ความสมบูรณ์ที่ลูกค้ารับรู้ได้
- #Tool18 ConceptualIntegrity-ความสมบรูณ์ของระบบภายใน
- #Tool 19 Refactoring – บางครั้งระบบที่มีความซับซ้อน และเราพบวิธีแก้ปัญหาที่ดีกว่า จึงต้องมีการแก้ไขโครงสร้างระบบเพื่อให้มี Conceptual Integrity
- #Tool 20 Testing ต้องมีการทดสอบระบบเพื่อให้แน่ใจว่า ระบบมีการทำงาน ตามที่เราต้องการจริงๆ
7 See the whole
System Thinking & System Dynamic Sub-optimization
1. ถ้าเป็นระบบที่ซับซ้อนให้เริ่มจากการแบ่งส่วนของระบบให้เป็นระบบย่อยๆแล้วจัดการทีละส่วน ก่อน
2. วัดความสามารถแต่ละส่วนทำให้ลดประสิทธิภาพทั้งระบบ (ต้อง
วัความสามารถทั้งระบบ)
#Tool 21: With measurement
การที่เรา optimize ทุกๆ ส่วนเป็นวิธีที่ไม่สมควร เราควร optimize ส่วนที่สำคัญมากๆ ซึ่งเราควรจะแยกแยะออกให้ได้ว่าส่วนไหนเป็นส่วนสำคัญที่เราจะ optimize ส่วนที่สำคัญส่วนใหญ่จะเป็นส่วนของ business logic จะวัดส่วนที่สำคัญได้จาก argregation
#Tool 22: Contract