Pull Systems in Software development

ปัญหาสำคัญปัญหาหนึ่งที่ทำให้ software development project ล่าช้า คือ การหลงเสียเวลาไปกับการทำสิ่งที่ไม่มีประโยชน์

ได้มีคนพยายามแก้ปัญหานี้ ด้วยการนำ Lean ซึ่งมีตัวอย่างที่ประสบความสำเร็จคือ TPS มาใช้กับ software development

หนึ่งใน tool ของ Lean ที่ผมจะเอามาเล่าวันนี้ คือ  Pull Systems

ขอออกตัวก่อนว่าผมไม่ได้รู้เรื่อง Lean มากนัก ผมใช้วิธีศึกษาในมุม practical แล้วย้อนกลับมาหาทฤษฎี แล้วพบว่า Pull Systems มันอธิบายหลายๆ อย่างได้

 

Pull Systems ในความเข้าใจของผม คือ การ focus ทำในสิ่งที่ก่อให้เกิด value ด้วยการไม่พยายามผลิตและผลักผลิตภัณฑ์ออกไปสู่ตลาด แต่ใช้วิธีการเก็บความต้องการของตลาดมาเป็นตัวขับเคลื่อนการผลิตแทน

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

– ลดการพัฒนาโปรแกรม ที่จริงๆ แล้วไม่เหมาะกับผู้ใช้งาน

– ลดการพัฒนาโปรแกรม ที่เกินความต้องการผู้ใช้งาน (ไม่สร้าง value)

 

วิธีการก็คือ พัฒนาระบบอย่างง่าย focus ที่ไอเดียและ concept แล้วรีบนำออกให้ผู้ใช้งานได้ทดลองทันที รอรับ feedback นำกลับมาปรับปรุงและ release version ใหม่อย่างรวดเร็ว

Google เป็นตัวอย่างที่ชัดเจนขององค์กรที่ใช้วิธีนี้(ด้วยความตั้งใจหรือเปล่า อันนี้ผมไม่ทราบ) เหล่าผลิตภัณฑ์ทั้งหลายของ Google จะปักป้าย Beta version ออกมาก่อน และเราจะพบว่ามันไม่สมบูรณ์ ณ วันที่ออกมา แต่ผลิตภัณฑ์เหล่านั้นจะแสดงความ unique ของผลิตภัณฑ์แต่ละตัวที่ออกมาอย่างชัดเจน และจะมีการปรับปรุงคุณภาพอย่างต่อเนื่องออกมาเป็นระยะ อย่างรวดเร็ว

 

การที่เราใช้เวลาในการพัฒนาน้อย ทำให้เรากล้าตัดสินใจที่จะโยนงานที่ไม่สำเร็จทิ้ง และเริ่มงานจาก idea ใหม่ได้ง่ายด้วย ถ้าเราเข้าใจความเป็นจริงที่ว่า idea ที่ดี จะประสบความสำเร็จได้ ต้องอาศัยช่วงเวลาและโอกาสที่เหมาะสม เพราะฉะนั้น ก็ควรลงทุนให้น้อยในแต่ละอย่าง แต่ใช้จำนวนเข้าสู้ น่าจะเป็นวิธีการที่ดีกว่า มันจะต้องโดนตลาดเข้าซักอันสิ

มีคนรวบรวมการ พัฒนาผลิตภัณฑ์ให้ใช้ต้นทุนต่ำที่สุดและเร็วที่สุด เหมาะกับบริษัท startup ที่ผู้ก่อตั้งมี idea เจ๋งๆ ไว้ในชื่อว่า Lean Startup 

 

ตัวชี้วัดว่าเรา เป็น Pull แค่ไหน ดูได้จากขนาดของ Inventory

Inventory ในมุมที่ผมเข้าใจ คือ สิ่งที่เราสร้างขึ้นมา ไม่ก่อนให้เกิด value และต้องใช้ทรัพยากรในการ maintain ด้วย

ระบบ Pull ในอุดมคติ คือ ต้องมี inventory เท่ากับ 0 หมายความว่า เมื่อพัฒนาอะไรขึ้นมาแล้ว ลูกค้าจะต้องได้รับทันที 

Inventory ใน software development ของผม ไมไ่ด้หมายความถึงแค่ code เท่านั้น แต่ยังรวมถึง diagram หรือ project planing document หรืออะไรก็แล้วแต่ที่ต้องใช้เวลาในการทำและmaintainสูง สิ่งเหล่านี้มีประโยชน์อย่างมาก แต่ก็ต้องใช้พลังในการ maintain consistency สูงเช่นเดียวกัน พยายามเลือกใช้เท่าที่จำเป็น หากเป็นไปได้ พยายามรวมมันเข้ากับ code จะดีกว่า จะได้มีจุด maintain แค่จุดเดียว

 

หลายคนหลังจากอ่านมาถึงจุดนี้ อาจจะมีข้อค้านว่า เราจะสามารถตอบสนองความต้องการ ตอบสนอง feedback ได้จริงๆ หรือ หากไม่ทำอะไรไว้ก่อน

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

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

สิ่งเหล่านี้ น่าจะสามารถทำได้ ด้วยการปรับใช้กระบวนการต่างๆ เช่น Refactoring, Clean Code, TDD, BDD, Peer/Code Review, Automate-testing, Continuous integration/deployment/delivery, A/B testing และ การ design ระบบที่ไม่มี coupling ระหว่าง component จนเกินไป

 

ข้อจำกัดของวิธีการนี้ก็มีเช่นกัน คือ ระบบคอมพิวเตอร์บนโลก มีจำนวนมากที่ไม่สามารถยอมรับความผิดพลาดได้ เช่น ระบบของธนาคาร, ระบบ transaction และระบบเครื่องบิน เป็นต้น ระบบเหล่านี้ จำเป็นจะต้องลดความผิดพลาดให้เหลือน้อยที่สุดเท่าที่จะเป็นไปได้ ก่อนที่จะ release ซึ่งก็หมายความว่า cost ที่ใช้ในการพัฒนาก็จะสูงขึ้น ความเครียดในการพัฒนามากขึ้น ซึ่งมูลค่าในการพัฒนาก็ควรสูงขึ้นตามไปด้วยเช่นกัน

 

ช่วงหลัง ผมมาสังเกตดูตัวเอง จริงๆ Pull ก็ปะปนอยู่ในวิธีคิดการใช้ชีวิตของผมอยู่เหมือนกัน

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

 

เขียนมาค่อนข้างยาว หวังว่าผู้อ่านจะชอบนะครับ 🙂

Advertisements

3 thoughts on “Pull Systems in Software development

  1. Pingback: ย้อนกลับไปมองความคิดในเรื่องการพัฒนาซอฟแวร์ | Tap

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s