emergent-tree-3
ได้อ่านบทความเรื่อง Emergent Design จาก blog ของคุณ Ron Jeffries
มีคนเขียน email มาถามคุณ Ron Jeffries เกี่ยวกับความหมายของ Agile Manifesto Principle ข้อนี้

“The best architectures, requirements, and designs emerge from self-organizing teams.”

คำที่ถูกถามก็คือคำว่า emerge ว่ามันเป็นอย่างไร
แล้ว architecture emerge มันเป็นอย่างไร
ในตอนที่ทำการพูดคุยก่อนการประกาศ Agile Manifesto
ผมเลยเอามาแปลและสรุปตามความเข้าใจของตัวเอง ดังนี้

ปล. แนวคิดนี้ไม่ใช่สิ่งที่ทุกๆ คิดเหมือนกันนะ เตือนไว้ก่อน

มาเริ่มกันเลยดีกว่า

รูปแบบการพัฒนา software แบบเดิมนั้น เขาใช้คำว่า The heavier approaches
ซึ่งมักจะแยก Architecture และ การออกแบบ  ออกมาจาก code
โดยทางผู้ร่วมมาพูดคุยก่อนการประกาศ Agile Manifesto รู้สึกว่ามันไม่น่าจะใช่นะ !

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

จากสิ่งที่พูดมานั้น

เราจำเป็นต้องทำการเปลี่ยนแปลงโครงสร้าง หรือ การ refactoring บางสิ่งบางอย่าง
โดยเฉพาะขั้นตอนการพัฒนา software ด้วยภาษาบางอย่างที่ส่งผลต่อแนวคิดของผู้อื่นๆ

สิ่งที่น่าสนใจก็คือ เรื่องของ คน (people)
ในการพัฒนา software นั้นคนสำคัญสุดๆ แต่ว่ารูปแบบการพัฒนาแบบเดิมๆ สนใจที่ process มากกว่า !!

เมื่อย้อนกลับไปในการพูดคุย
code ที่เกิดขึ้นมานั้น มันส่งผลต่อการออกแบบเสมอ
ดังนั้นบ่อยครั้งที่การออกแบบ นั้นต้องสามารถเปลี่ยนแปลงได้เสมอ
code ที่เราเขียนขึ้นมา เป็นการบอกว่าการออกแบบที่เราต้องการเป็นอย่างไร

ดังนั้นการออกแบบระบบ
จะถูกค้นหาอยู่อย่างต่อเนื่อง ไปตลอดการพัฒนา
ถ้าคุณเปิดใจยอมรับการเปลี่ยนแปลงเหล่านี้
คุณจะอยู่กับ code และปรับปรุง code เสมอ
นั่นคือทำการ refactoring code อยู่อย่างเสมอ

แต่อย่างไรก็ตาม
คุณจำเป็นต้องมีกลุ่มคนออกแบบเก่งๆ ด้วยนะ
เพื่อให้สามารถรับฟังสิ่งต่างๆ สิ่งที่ออกมาจาก code ( Listening when the code speak )
ไม่เช่นนั้นมันจะเป็นการพูดคุยแบบทางเดียว คือ การเขียน code แต่ไม่สนใจสิ่งที่ออกมาจาก code เลย

แต่ทุกอย่างมันเป็นเรื่องของ คน ล้วนๆ

ดังนั้นทุกๆ คน จะต้องสามารถ self-origanize ได้
รวมทั้งต้องมีความสามารถ ไม่ใช่เพียงทำให้ถูกต้องเท่านั้น
แต่ต้องรู้จักการปรับปรุงให้มันดีขึ้นอยู่อย่างเสมอด้วย
นั่นคือ การเปลี่ยนแปลง (change)
และผลของมันก็ปรากฎออกมาให้เราเห็นนั่นเอง (emerge)

ถ้าระบบงานของคุณมันยังมีชีวิตอยู่

การออกแบบ architecture ต่างๆ จะต้องมีการเปลี่ยนแปลง
และระบบจะมีการ emerge ออกมาให้เราเห็น
โดยทีมจะต้องสามารถรับมือ
โดยทีมจะต้องสามารถลงมือทำ
โดยทีมจะต้องสามารถจัดการ
ในการจัดการที่ดีที่สุดคือ การตอบรับการเปลี่ยนแปลงนั้นได้อย่างทันท่วงที
ดังนั้นเรื่องของทีมสำคัญอย่างมาก และทีมต้องสามารถ Self-organize ได้

ผลลัพธ์ที่ดีที่ได้รับมานั้น ล้วนมาจาก Self-organizeing teams ทั้งสิ้น

แล้วตัวเรา และ ทีมของเราล่ะ เป็นอย่างไร ?