Sufficiency Economy & Agile

ผมเคยคุยกับคุณ Kluak110 เมื่อหลายปีก่อนเกี่ยวกับเรื่องว่า Agile และหลักเศรษฐกิจพอเพียงนั้นเป็นเรื่องเดียวกัน เมื่อวานนี้คุณ Kluak110 ขอ encore ผ่านทาง agile66 forum เข้ามา คิดว่าคงจะยังติดใจเรื่องนี้อยู่

ถ้าฟังจากสื่อต่างๆ คงจะงงว่า แล้วฉันไม่ได้ไปทำนา ฉันเป็นโปรแกรมเมอร์ เป็น developer แล้วเศรษฐกิจพอเพียงมาเกี่ยวอะไรด้วย หรือเขียนโปรแกรมมันไม่พอกิน ต้องให้ฉันไปทำนาด้วย ลองฟังพระราชดำรัชนี้ดูดีกว่า

เศรษฐกิจพอเพียง แปลว่า Sufficiency Economy … คำว่า Sufficiency Economy นี้ไม่มีในตำราเศรษฐกิจ จะมีได้อย่างไร เพราะว่าเป็นทฤษฎีใหม่ … Sufficiency Economy นั้น ไม่มีในตำรา เพราะหมายความว่าเรามีความคิดใหม่ … และโดยที่ท่านผู้เชี่ยวชาญสนใจ ก็หมายความว่า เราก็สามารถที่จะไปปรับปรุง หรือไปใช้หลักการ เพื่อที่จะให้เศรษฐกิจของประเทศและของโลกพัฒนาดีขึ้น

พระราชดำรัสเนื่องในโอกาสวันเฉลิมพระชนมพรรษา 23 ธันวาคม 2542

ไม่มีตรงไหนเลยที่บอกว่าเศรษฐกิจพอเพียงเป็นเรื่องการเกษตร มีแต่บอกว่าเกี่ยวกับเศรษฐกิจ เพราะฉะนั้น “อะไรที่เกี่ยวข้องกับเศษฐกิจใช้เศรษฐกิจพอเพียงได้หมด” ซึ่งการพัฒนาซอฟแวร์ก็เป็นส่วนหนึ่งของเศรษฐกิจเพราะฉะนั้นน่าจะใช้ได้ เศรษฐกิจพอเพียงนั้นมีหลักการง่ายๆ ว่า “สามห่วงสองเงื่อนไข (ตามรูป)

ผมจะอธิบายหลัก “สามห่วงสองเงื่อนไข” ในเทอมของ Agile ไปด้วยกันเลย เพื่อให้เห็นภาพการซ้อนทับกันของแนวคิด ความจริงถ้าไม่มี Agile เข้ามาจับ เราก็น่าจะสร้างวิธีพัฒนาซอฟแวร์ตามเศรษฐกิจพอเพียงได้ แต่ในเมื่อมี Agile อยู่แล้วเราจะไป “reinvent the wheel” ทำไม

สามห่วง คือ คุณลักษณะ 3 ประการที่จำเป็นต้องมี

1. ความพอประมาณ หมายถึง ความพอดีที่ไม่น้อยเกินไปและไม่มากเกินไป โดยไม่เบียดเบียนตนเองและผู้อื่น

Just in time & Just enough ผมแปลเรื่องนี้เป็นไทย ว่า หลัก “3 จำเป็น” คือ ทำเฉพาะ สิ่งที่จำเป็น ในเวลาที่จำเป็น เท่าที่จำเป็น เหตุผลเพราะ ถ้าเราไม่ทำสิ่งที่จำเป็น(ตาม requirement) software ของเราก็ไม่สามารถตอบสนองความต้องการของลูกค้าได้ เหตุผลที่เราต้องทำสิ่งจำเป็นเหล่านั้นให้เสร็จทันเวลาที่จะใช้พอดี เพราะการทำเสร็จมาวางคอยไว้เป็นความสูญเปล่า(ดู 7 wastes) และทำให้กำลังใจ(morale) ของทีมลดลง สุดท้ายต้องทำเท่าที่จำเป็น เพราะถ้าทำเผื่อหรือทำเกิน จะเป็นภาระให้เราต้องตามดูแล(maintenance) มันตลอดไป สุดท้ายเราจะเรียกมันว่า legacy code และเรียกร้องที่จะเขียนใหม่ทั้งหมด และเริ่มต้นวงจรอุบาทก์(vicious circle) อีกครั้งหนึ่ง

Muda (7 wastes) การทำอะไรที่ไม่พอดีเป็นการสูญเปล่า แต่การที่ไม่มี buffer เลย และพอเกิดปัญหา ระบบงานก็หยุดชะงัก ก็เป็นความสูญเปล่าอีกเช่นกัน เพราะฉะนั้นเราจะต้องมี buffer สำรองให้น้อยที่สุดเท่าที่จะยังรักษาความต่อเนื่อง(flow)ของระบบงานได้ ตัวอย่างเช่นการสร้าง user story ถ้าเราพยายามสร้าง story ของทั้งโปรเจ็คให้เสร็จในคราวเดียวนับเป็นความสูญเปล่า เพราะ requirements อาจจะเปลี่ยนเมื่อไหร่ก็ได้ แต่ถ้าเราสร้าง story เท่าที่จะทำใน sprint ก็เป็นความสูญเปล่าอีกนั่นแหละ เพราะ story ทั้งหมดใน sprint อาจเสร็จก่อนเวลา แล้ว developer ก็จำเป็นต้องนั่งว่างเพราะไม่มีอะไรทำ เพราะฉะนั้น การสร้าง story ควรจะสร้างเตรียมไว้ ให้มากกว่าที่จะทำได้ใน 1 sprint แต่ไม่เกิน 2 sprint จึงจะนับได้ว่าพอดี เป็นต้น

2. ความมีเหตุผล หมายถึง การตัดสินใจเกี่ยวกับระดับของความพอเพียงนั้นจะต้องเป็นไปอย่างมีเหตุผล โดยพิจารณาจากเหตุปัจจัยที่เกี่ยวข้องตลอดจนคำนึงถึงผลที่คาดว่าจะเกิดขึ้นจากการกระทำนั้น ๆ อย่างรอบคอบ

User story การใช้ user story ในการกำหนด requirement นั้นประกอบด้วย who what และ why เพื่อให้เราได้รู้รายละเอียดและต้นตอของ requirement นั้นอย่างแจ่มชัด

5 Whys การพิจารณาหาต้นตอของปัญหา(จริงๆ ทุกเรื่องน่ะแหละ) ด้วยการถามคำถามที่ขึ้นต้นว่าทำไม อย่างน้อย 5 ครั้งเพื่อนำเราไปยังต้นตอที่แท้จริงของปัญหา และสามารถแก้มันได้อย่างถาวรและยั่งยืน

3. การมีภูมิคุ้มกันที่ดีในตัว หมายถึง การเตรียมตัวให้พร้อมรับผลกระทบ และการเปลี่ยนแปลงด้านต่าง ๆ ที่จะเกิดขึ้นโดยคำนึงถึงความเป็นไปได้ของสถานการณ์ต่าง ๆ ที่คาดว่าจะเกิดขึ้นในอนาคตทั้งใกล้และไกล

Embrace change พร้อมรับการเปลี่ยนแปลงอยู่เสมอ(Responding to change over following a plan) การที่เราจะรับความเปลี่ยนแปลงต่างๆ ได้ ไม่ใช่แค่ใช้ใจเท่านั้น เรายังต้องมีการเตรียมพร้อมที่ดีด้วย 2 ข้อแรก(ความพอประมาณและมีเหตุผล)นั้น เป็นการเตรียมตัวเพื่อข้อนี้โดยเฉพาะ เพราะ ถ้าเราทำอะไรไม่พอประมาณเช่นออกแบบระบบให้ใหญ่และซับซ้อนเกินไป(เผื่อ) พอเวลาเกิดการเปลี่ยน requirement โค้ดที่เราจะต้องแก้ก็มากขึ้น ที่จะต้องเทสท์ ก็มากขึ้นตามไปด้วย

TDD (Test Driven Development) เป็นเครื่องมือสำคัญที่ใช้ในการสร้างภูมิคุ้มกันต่อความเปลี่ยนแปลง เพราะเมื่อเราเปลี่ยน โค้ด Test จะเป็นตัวบอกเราทันทีว่าโค้ดที่เราทำยังถูกต้องตาม requirements อยู่หรือไม่ (Jidoka/Autonomation)

สองเงื่อนไข คือในการตัดสินใจวางแผนและดำเนินงานนั้นให้เป็นไปตามเงีอนไขดังนี้

1. เงื่อนไขความรู้ ประกอบด้วย ความรอบรู้เกี่ยวกับวิชาการต่าง ที่เกี่ยวข้องอย่างรอบด้าน ความรอบคอบที่จะนำความรู้เหล่านั้นมาพิจารณาให้เชื่อมโยงกัน เพื่อประกอบการวางแผนและความระมัดระวังในขั้นปฏิบัติ

Planning Poker หลายคนพอได้ยินคำว่า”รอบรู้” ก็จะพยายามคิดว่า อ่ะ ข้าต้องรู้ทุกเรื่อง ความจริงแล้วความในที่นี้คือการรวมและกระจายความรู้อย่าง dynamics เพราะมันเป็นไปไม่ได้ที่ใครคนใดคนหนึ่งจะรู้ทุกเรื่อง การรวมคนเข้ามาช่วยกันคิดจึงเป็น การเพิ่มความรอบรู้ โดยเอาความรู้ของทั้งทีมมาบวกกัน เทคนิคนี้เรียกว่า Cloud thinking หรือที่ไทยเรียกว่า สอง(หลาย)หัวดีกว่าหัวเดียว นอกจากทำให้รอบรู้ขึ้น การมีหลายคนช่วยกันคิดวางแผนยังทำให้เกิดความรอบคอบด้วย เพราะมีหลายตาช่วยกันมองตรวจสอบ

Pair Programming เมื่อถึงขั้นตอนปฏิบัติ(ลงมือโค้ด) การใช้สองคนช่วยกันทำ ทำให้เกิด ความระมัดระวัง เพราะคนหนึ่งมองจาก user requirement perspective อีกคนมองจาก technical perspective และ การทำ pair ยังเป็นการการกระจายความรู้ อีกทางหนึ่ง ทีมจึงมีความรู้รอบ และรอบรู้ไปพร้อมๆ กัน

2. เงื่อนไขคุณธรรม ที่จะต้องเสริมสร้างประกอบด้วย มีความตระหนักในคุณธรรม มีความชื่อสัตย์สุจริต และมีความอดทน มีความพากเพียร ใช้สติปัญญาในการดำเนินชีวิต

Agile Discipline การใช้งาน agile นั้นต้องอาศัยความมีวินัยอย่างถึงที่สุด มีหลายคนสับสน Agile กับ Cowboy style ผมบอกได้ว่า มันต่างถึงขนาดพระกวาดลานวัด กับหมาปัดที่นอน เลยที่เดียว (ถ้าเคยเลี้ยงหมาลองสังเกตมันจะวนที่ๆ มันจะนอนสองสามรอบก่อนนอนลงไปจริงๆ)

Individuals and interactions over processes and tools ผมพูดเรื่องนี้หลายรอบแล้ว แต่ก็ยังคงย้ำอยู่ว่า คนเป็นคนไม่ใช่เครื่องจักร ผมมีความเห็นแย้งกับแนวความคิดที่ว่าคนเป็น resources เอามากๆ โดยส่วนตัวผมคิดว่า คนในทีมคือเจ้าของ product มากกว่าจะเป็น resources ที่ใช้ในการผลิต

Customer collaboration over contract negotiation นอกจากทีมจะเป็นเจ้าของ product แล้ว ลูกค้ายังเป็นเจ้าของ product ด้วย เพราะเขาจะเป็นคนที่ต้องใช้ชีวิตอยู่กับ product นี้ไปอีกหลายปี เขาควรจะมีชีวิตที่ดีขึ้น จากการเป็นเจ้าของมัน ไม่ใช่ทำให้ชีวิตลำบาก(miserable)

บังเอิญว่าผมไม่ได้ติดโน้ตที่ผมเคยจดเรื่องนี้เอาไว้มาด้วย ทั้งหมดบีบออกมาจากหัว(ยังกะสิว) ถ้าตกหล่นตรงไหนไปผมจะเอามาเพิ่มทีหลังให้นะครับ

Links
http://th.wikipedia.org/wiki/เศรษฐกิจพอเพียง
http://en.wikipedia.org/wiki/Muda_%28Japanese_term%29
http://en.wikipedia.org/wiki/5_Whys
http://en.wikipedia.org/wiki/Autonomation
http://www.drdobbs.com/architecture-and-design/201804241

Advertisements

ใส่ความเห็น

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out /  เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out /  เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out /  เปลี่ยนแปลง )

Connecting to %s