จัดเก็บไว้ในประเภท 'Software Architecture'

10
ส.ค.
09

อีกด้านหนึ่งของ ‘SOA’ ที่ไม่มีใครพูดถึง

เกริ่นนำ
SOA หรือ Service-Oriented Architecture เป็น ‘แนวคิด’ ทางสถาปัตยกรรมซอฟต์แวร์เชิงบริการ โดยมีพื้นฐานอยู่บนสถาปัตยกรรมซอฟต์แวร์ (จากนี้จะขอเรียกสั้น ๆ ว่า ‘architecture’) แบบ Enterprise Architecture ที่มีการประมวลผลลักษณะ Distributed Computing

SOA ก็คือการสร้างเลเยอร์ (architectural layer) มาครอบระบบฯ และทรัพยากรไอทีขององค์กรที่มีอยู่ และที่จะเกิดขึ้นในอนาคต… ทั้งหมดหรือเกือบทั้งหมด โดยเลเยอร์นี้เรียกว่าชั้นบริการ (service layer) ด้วยเหตุผลเพื่อให้เกิดการเชื่อมโยงติดต่อ (integrate) กับระบบฯ และทรัพยากรไอทีต่าง ๆ ที่ชั้นบริการนี้ ลดความซับซ้อนยุ่งเหยิงที่มีมาในอดีต การจัดการ transaction, security, การแปลง (adapt) ของการ call ระหว่างระบบที่ต่างแพลตฟอร์มกัน, การทำ data exchange, การจัดการเครือข่าย ฯลฯ เหล่านี้จะได้รับ ‘การปรับปรุง’

แต่หากมองอีกด้านหนึ่งของประเด็นข้างต้น นี่หมายถึงอะไร? มีนัยสำคัญใดซ่อนอยู่? ลองมองข้ามประเด็นด้านเทคโนโลยีและคุณประโยชน์ของ SOA ออกไปก่อน… นี่อาจเป็นช่องทางที่ก่อให้เกิดการผูกขาดทางการค้าใช่หรือไม่? หากโซลูชั่นของผู้ค้ารายใดได้ถูกนำมาใช้ในองค์กรนั้น และมีการใช้กลยุทธ์ ‘Vendor Lock-In’ ขึ้นอย่างแยบยล หรือจะเปิดเผยโฉ่งฉ่างก็ตาม โดยมีการออกแบบอินเตอร์เฟซที่สลับซับซ้อน ซ่อนเงื่อน มี ‘API เปิดเผย’ จำนวนหนึ่ง นี่อาจเข้าข่ายการเป็น ‘มาตรฐานปิด’ ก็ได้ แม้ผู้ค้าจะออกแถลงว่าตนใช้มาตรฐานเปิด เช่น พัฒนาต่อยอดมาจากโอเพ่นซอร์ส ใช้ Java ใช้เว็บเซอร์วิส เป็นต้น แต่ในฐานะ architect และคนในวงการ architect ต่างก็รู้ ๆ กันอยู่ ว่าเราสามารถทำให้ ‘ปิดในส่วนที่อยากปิด และเปิดในส่วนที่อยากเปิด’ ได้

องค์กรอาจถูกแนะนำ (บังคับทางอ้อม) ให้ปรับปรุง:

  • ระบบ security เช่นอนาคตจะได้รองรับ single sign-on, digital certificate และติดตั้งระบบ intrusion detection system (IDS) จะได้ปัองกับแฮกเกอร์และการโจรกรรมข้อมูล (หว่านล้อมโดยพูดให้ฟังดูน่ากลัว) ฯลฯ
  • การจัดการ transaction เช่น เมื่อดึงการจัดการ transaction ขึ้นมาที่เลเยอร์บนแล้ว เพื่อจะได้ติดตาม (monitor) การทำงานของ transaction ได้สะดวกต้องมี transaction monitor server ฯลฯ
  • การจัดการ business process เช่น เพื่อให้เห็นภาพโดยง่าย ทำ model ได้ง่าย ติดตาม (monitor) และจัดการได้ง่ายต้องมีเครื่องมือด้าน business process modeling, business process management ฯลฯ
  • การติดต่อกับ service ต่าง ๆ เช่น เพื่อให้พัฒนาส่วนแสดงผล (presentation) ได้ง่าย ยืดหยุ่น ปรับปรุงง่าย ไม่ต้องเขียนโค้ดมาก เพิ่มเติมต่อยอดได้ง่าย และรองรับ WEB 2.0 โดยต้องใช้ portal ฯลฯ
  • การ map ระหว่าง service กับระบบฯ ต่าง ๆ ที่มีหลายแพตฟอร์มทำได้ง่ายขึ้นด้วยการใช้ adapter และต้องมี Enterprise Service Bus (ESB) และมี adapter ที่มีความสามารถและ ‘แปลง’ ให้ทำงานร่วมกับแพลตฟอร์มต่าง ๆ ได้มากมาย
  • การจัดการ service registry เช่น เพื่อประสิทธิภาพและความปลอดภัย ต้องเก็บไว้ใน directory server โดยทำงานบนโปรโตคอล LDAP ฯลฯ
  • การจัดการ messaging เช่น เพื่อให้มีความน่าเชื่อถือ (reliability) สูงสำหรับการ call โดยเฉพาะการ call แบบ asynchronous ต้องใช้ message queue server ฯลฯ
  • การโฮสต์แอพพลิเคชั่น (พวกพ่อค้าคงลืมไปว่า SOA ไม่มีแนวคิดด้านแอพพลิเคชั่นแล้ว) เช่น การติดตั้ง (deploy) แอพพลิเคชั่น และการจัดการต่าง ๆ ต้องใช้ application server และหากต้องการให้รองรับ scalability ต้องมี web server แยกต่างหาก ฯลฯ
  • การจัดการ fault tolerance เช่น งานมีความสำคัญ มี transaction สำคัญและไม่ต้องการให้เกิดความเสียหาย ผิดพลาด หรือหากเกิดขึ้นก็สามารถกู้คืนได้ และต้องการรองรับ load สูง ๆ ได้ ต้องทำ load balance, clustering, hot swap, cold swap, active redundancy, passive redundancy, shadow processing, state resychronization, backup and recovery (พูดหว่านล้อมใช้ศัพท์ให้ดูยาก ๆ ไว้) ดังนั้นต้องมีเครื่องเซิร์ฟเวอร์เพิ่มเติม และมีอุปกรณ์ด้าน cluster และ mass storage รวมถึงต้องอัพเกรดระบบเน็ตเวิร์กและอุปกรณ์เน็ตเวิร์ก ฯลฯ
  • ฯลฯ

แล้วใครอยู่เบื้องหลังหรือเป็นผู้ผลักดัน SOA ให้เกิดเป็นกระแสที่รุนแรงอยู่ในปัจจุบันนี้? องค์กรที่มีการบริโภคไอทีจำเป็นต้องใช้ SOA จริงหรือไม่? การทำ Enterprise Application Integration (EAI) ยังมีวิธีอื่นอีกหรือไม่? เมื่อโลกเข้าสู่ยุคบริการแล้วระบบไอทีจำเป็นต้องร่วมวงด้วยหรือไม่?

ซอฟต์แวร์มีวันเสื่อมหรือไม่? คำตอบคือ ไม่!… ถ้าไม่มีใครไปทำหรือพยายามทำให้มันเสื่อม! เพราะซอฟต์แวร์มันห่อหุ้ม (encapsulate) ลอจิกต่าง ๆ เอาไว้ ถ้าเราออกแบบและพัฒนาโดยแบ่งแยกลอจิก (partitioning logic) ให้ดี โดยออกแบบและพัฒนาให้ลอจิก เทคโนโลยี และฮาร์ดแวร์แยกขาดจากกันให้มากที่สุด ซอฟต์แวร์ก็จะไม่มีวันเสื่อม!

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

โลกแห่งการประมวลผลทางคอมพิวเตอร์เราได้ผ่านช่วงยุค (generation) ต่าง ๆ มาแล้วมากมาย แต่มิได้หมายความว่า ‘สังคมแห่งการพัฒนาไอที’ เราโตจนมีวุฒิภาวะที่ดีแล้ว เพราะอุตสาหกรรมหรือธุรกิจซอฟต์แวร์เพิ่งอุบัติขึ้นมาบนโลกนี้ไม่กี่สิบปีเท่านั้น (บิลล์ เกตส์ ตอนนี้ยังมีชีวิตอยู่เลย และคงอยู่ไปอีกหลายปี) เราผ่านยุคเมนเฟรม ไคลเอ็นต์-เซิร์ฟเวอร์ อ็อบเจ็คต์ช่วงต้น เว็บ ฯลฯ และตอนนี้พวกกูรู หรือพวก ‘กูรู้’ ต่างออกมาบอกว่า “เรากำลังจะเข้าสู่ยุค service” และพวก ‘กูรู้’ เหล่านี้ก็คิดค้นดัดแปลงเล่นแร่แปรธาตุกันสนุกมือได้นวัตกรรมใหม่ออกมาเรียกว่า ‘Service-Oriented Architecture’ บริษัทวิจัยด้านไอทีมากมายต่างก็ออกมาประโคมว่ามันมาแน่ เราจะเข้าสู่ยุคทุกข์เข็ญ เอ้ยไม่ใช่! เข้าสู่ยุค service กันจริง ๆ แต่กระแสเศรษฐกิจและการค้าโลก ที่จะเน้นเชิงบริการมากยิ่งขึ้น ดังนั้นแอพพลิเคชั่นซอฟต์แวร์ต่าง ๆ ก็เช่นกัน ก็จะเข้าสู่ยุคบริการเช่นกัน

“ใช่” ผมก็เห็นด้วยว่ายุคแห่ง ’service’ มาแน่ ๆ และตอนนี้ก็เข้ามาจอดเทียบหัวหาดแล้วด้วยซ้ำ เพียงแต่ว่าเราต้องรีบหักหัวเรือเข้าร่วมด้วยทันทีหรือไม่?

- การใช้ชีวิตตามยุคสมัย นั้นต่างจากการใช้ชีวิตร่วมสมัย -

เหล่ากูรู้และผู้ผลักดัน
พวกกูรู้เหล่านั้นเป็นใครกันบ้าง แน่นอนส่วนหนึ่งคือนักวิชาการ นักวิจัย ผู้เชี่ยวชาญที่อยู่ในอุตสาหกรรมซอฟต์แวร์ และรวมถึง ‘ผู้ค้า’ ที่ไม่ได้เป็นเพียงพ่อค้าอย่างเดียว แต่ผู้ค้าเหล่านี้ส่วนใหญ่เป็นผู้พัฒนาเทคโนโลยีและเครื่องมือด้วย และบางรายก็ ‘ค้า’ ระบบฮาร์ดแวร์และเน็ตเวิร์กด้วย กูรู้ที่อยู่ในคราบพ่อค้ารายใหญ่เช่นใครบ้าง? โลกนี้มีไม่กี่เจ้า ไม่บอกก็รู้ว่าใครบ้าง แล้วกูรู้ที่อยู่ในคราบนักวิชาการล่ะ ก็เช่น พวกผู้บริหารที่มีวิญญาณนักวิชาการที่ทำงานอยู่บนหอคอยงาช้าง ดูแลงานไอที บ้างสิงสู่อยู่ตามหน่วยงานภาครัฐ ภาคเอกชน ภาคการศึกษา มีหัวใจนักวิชาการแต่อาจไม่ได้เป็นนักปฏิบัติ (practitioner) ก็ได้ คือ ‘คิดเก่ง ไม่ใช่ อาชญากร… ทำไม่เป็น ไม่ใช่อาชญากรรม’ หลายรายมีพวกพ่อค้าหนุนหลังสนับสนุน หลายรายมีหุ้นอยู่ในบริษัทเอกชน แต่อย่าถามว่าใคร เพราะชี้ชัดยาก ก็เพราะเขาใช้ ‘นอมินี’ กัน

ในขณะที่ SOA เป็นแนวคิดที่เพิ่งอุบัติขึ้นมาไม่นาน ยังไม่มีมาตรฐานที่ชัดเจน กลับมีเครื่องไม้เครื่องมือวางขายเกลื่อนกลาดตามตลาดเสียแล้ว พ่อค้าแม่ค้าออกมาเร่ขายสินค้า (โซลูชั่น) กันเป็นแถว เราประชาชนตาำดำ ๆ เป็นนักพัฒนาระดับรากหญ้าที่ทำมาหากินอยู่บริเวณโคนต้นหญ้า เหยียบดินเหยียบโคลนอยู่ทุกวัน และพวกกูรู้ที่อยู่บนหอคอยงาช้างอาจไม่เคยมองเห็นพวกเราจริง ๆ สักครั้งเลยก็ได้ แล้วเราจะทำอย่างไรกันดี? ใช้ชีวิตอย่างจำนน จำยอมให้พ่อค้าแม่ค้าเอาหมากมาล้อม ราวกับว่าพวกเขาคือผู้เล่นเกมหมากล้อมกันเอง ส่วนพวกเราเป็นเพียงหมาก หรือจะใช้ชีวิตแบบปิดหูข้างหนึ่ง ปิดตาข้างหนึ่ง อ้าปากคุยกันเอง แต่ปิดปากกับคนภายนอก แล้วฝืนยิ้มร่าบอกโลกว่าแค่นี้ฉันก็สุขใจ หรือจะแค่มานั่งวิพากษ์ SOA กันไปวัน ๆ แต่ไม่ทำอะไร เหมือนถ่มน้ำลายขึ้นฟ้ากระนั้นหรือ? แล้วสุดท้ายก็ต้องก้มหน้าทำ SOA ทั้งที่มีคำถามในใจมากมาย เช่น ทำไปเพื่ออะไร? ทำไมต้องทำ? ทำไมต้องใช้? มันจำเป็นจริงหรือ? คนทำต้องมีความรู้และทักษะแท้จริงอะไรบ้าง? สิ่งที่พวกกูรู้เหล่านั้นออกมาบอก มันมีแค่นั้นจริง ๆ หรือ? หรือว่าแท้จริงเขาเหล่านั้นก็ยังไม่รู้จริงเลยด้วยซ้ำ? ทำไมโครงการ SOA ถึงมีมูลค่าเป็นร้อย ๆ ล้าน? ใช้โอเพ่นซอร์สไม่ได้หรือ? ไม่มีหรือ? ก็ในเมื่อมันเป็นแนวคิด แล้วเราพัฒนาเครื่องมือหรือสร้างเอ็นจิ้นขึ้นมาใช้เองไม่ได้หรือ? เอ… หรือว่าพวกเราจะเป็นอย่างผลสำรวจการศึกษาโดยภาครัฐ ที่บอกว่าประชาชนไทยอ่านหนังสือเฉลี่ยปีละ 7 บรรทัด? นี่เรากำลังถูกพวกกูรู้ดูถูกอยู่ใช่ไหม? ประมาณว่ามึงไม่ต้องคิด มึงไม่ต้องศึกษา กูหาของไปให้ใช้ หาคนไปทำให้ มึงอยู่เฉย ๆ? พอกูรับเงินเสร็จ ขายฮาร์ดแวร์เสร็จ ขายซอฟต์แวร์เสร็จ กูก็จะ ‘สับ’ งานให้บริษัทอื่นหรือพาร์ทเนอร์เอาไปทำต่อ แล้วกูก็จะชิ่ง ถ้างานล้มเหลวมึงก็ไปโทษพาร์ทเนอร์หรือคนที่เขาไปทำให้มึงแล้วกัน? เพราะกำไรของกูมาจาก ‘ของ’ ของกู ไม่ใช่ ‘ของ’ ของมึง ฯลฯ

ใครมีส่วนได้-เสียในโครงการ SOA
เหล่านักพัฒนาตาดำ ๆ ใช้ชีวิตอยู่แถวโคนต้นหญ้า ก้มหน้าก้มตารับวิบากกรรม ส่วนมากก็รู้อยู่แก่ใจว่ามิใช่ใครถ้าไม่ใช่ผู้บริหารของเรานี่เอง

การขาดวิสัยทัศน์ด้านไอทีและสถาปัตยกรรมซอฟต์แวร์ (technological and architectural visions) อย่างรุนแรงในเหล่าผู้บริหารไอที และอาจลามไปถึงผู้บริหารองค์กรด้วย คือหายนะสำคัญ ยิ่งหากเป็นพวกที่มีหัวคิดเชิงทุนนิยมและบริโภคนิยมด้วยแล้วยิ่งอันตราย

การพึ่งพาและเชื่อใจบุคคลภายนอกมากกว่าคนภายในขององค์กร, การจัดซื้อ/จัดจ้างแบบมีเงื่อนงำ, การไม่ปรึกษาหรือประเมินความพร้อมขององค์กรหรือโดยเฉพาะของทีมไอทีของตนเองก่อน, การชื่นชมชื่นชอบการจับจ่ายซื้อหาสิ่งของ มากกว่านำเพียงเศษสตางค์มาสร้างฐานความรู้ให้องค์กรและให้ทีมงานตน, การพยายามวิ่งให้ทันเทคโนโลยีแต่ตนเองกลับไม่เข้าใจแท้จริงสักอย่างว่าวิ่งไปเพื่ออะ
ไร แล้วไอ้เทคโนโลยีที่วิ่งตามมันคืออะไร,
การติดยึดในศักดิ์ศรีและการชิงดีชิงเด่นทางการแข่งขันระหว่างองค์กรหรือธุรกิจ, การติดยึดกับชื่อเสียงของบริษัทพ่อค้าแม่ค้าระดับโลก แต่ไม่ดูด้านลึกว่าบริษัทเหล่านั้นในประเทศเราเขาเป็นอย่างไร บางรายมีธุรกิจหลักคือฮาร์ดแวร์ ซอฟต์แวร์และเทคโนโลยีเป็นเพียงของแถมและเครื่องมือสร้างภาพลักษณ์ บางรายก็ใหญ่โต (เกินพอดี) เล่นเกมการเมืองเข้มข้น บางรายเพิ่งถูกซื้อ เพราะเหตุผล ‘เธอดีเกินไป’ ของฉันสู้ของเธอไม่ได้ งั้นฉันขอซื้อเธอละกัน จึงไม่รู้ว่าถูกซื้อไปทิ้งหรือเอาไปเลี้ยงแต่ไม่ให้โต บางรายก็เคี่ยวลากดิน แต่ใหญ่โตคับโลก บางรายก็เก่งเฉพาะด้าน แต่เผอิญไม่เก่ง SOA ฯลฯ

(ในงานบรรยายล่าสุด ผมบอกผู้ฟังว่า เป็นผมผมจะเลือกเจ้าที่เคี่ยวลากดิน แต่ใหญ่คับโลก เพราะมีความพร้อมด้านฝึกอบรม และเชี่ยวชาญทั้งเทคโนโลยีและงานบริหาร มากที่สุด แต่มีข้อแม้ว่า ผมต้องสร้างภูมิคุ้มกันป้องกันความเคี่ยวของเขาให้ดีเสียก่อน! ส่วนเจ้าที่เหลือ ใช้เทคโนโลยีที่ผมมีความชำนาญมาร่วมสิบปี จึงเห็นด้านมืดที่ซ่อนอยู่หลายอย่าง ซึ่งเมื่อก่อนมันก็ไม่ได้มืดทึมอย่างนี้ แต่เดี๋ยวนี้มันมืดทะมึนเพราะพวกกูรู้ในคราบพ่อค้า)

ประเด็นเหล่านี้เป็นเพียงเศษเสี้ยวของวิสัยทัศน์ที่สุ่มเสี่ยงต่อหายนะด้านไอทีขององ
ค์กร เพราะหากความผิดพลาดหรือการมีวิสัยทัศน์ที่แย่ ๆ ในระดับบริหารแล้ว การถ่ายทอดและแปลงวิสัยทัศน์สู่การปฏิบัติ (transform vision to operations) ตามชั้นลำดับหน้าที่การงาน จนถึงระดับคนทำงานจริงจะเป็นอย่างไร ในเมื่อความผิดพลาดและเป็นตัวการอาจก่อให้เกิดความล้มเหลวกลับอยู่ที่ระดับสูงสุด (หรือเกือบสุด) กลายเป็นผลกระทบแบบ ‘Ripple Effect’ แล้วตัวเองก็มักหาทางหนีทีไล่ด้วยการใช้ (เล่น) การเมืองภายในองค์กร จนเอาตัวรอดได้แทบทุกครั้ง ปัญหาการเมืองภายในองค์กร และทุจริต คอร์รัปชั่นมันถึงไม่มีวันหมดไปง่าย ๆ จากเมืองไทย ในเมื่อผู้บริหารยังคงยึดถือเป็นส่วนหนึ่งใน ‘job description’

ไม่กี่วันมานี้มีผลสำรวจเด็กวัยรุ่นว่าโตขึ้นอยากทำอะไรมากที่สุด… “อยากคอร์รัปชั่นแบบนักการเมืองครับ/ค่ะ” !!!

และนอกจากนี้การเข้ามาล็อบบี้ของพวกกูรู้ที่เป็นพ่อค้าแม่ค้า โดยเข้ามา ‘ล็อกสเป๊กฯ’ บ้าง เข้ามาโฆษณาชวนเชื่อบ้าง เข้ามาให้ ‘สินน้ำใจ’ บ้าง หากเป็นธรรมเนียมปฏิบัติเพียงเล็กน้อย แค่พอเป็น ‘ค่าผ่านทาง’ หรือ ‘น้ำใจ’ เล็กน้อย ก็พอไหว เพราะถึงอย่างไรแล้วประเด็นทุจริตคอร์รัปชั่นก็คงหมดจากโลกนี้ไปได้ยาก แต่ทำไมประเทศที่เจริญแล้วเขาไม่ค่อยมี (ไม่ใช่ไม่มี แต่มีแบบไม่โฉ่งฉ่าง) ก็เพราะเขายังคำนึงถึงผลประโยชน์ต่อองค์กรที่เขารับใช้เป็นสำคัญอยู่ ไม่ใช่คำนึงถึงผลประโยชน์ต่อตนเองเป็นสำคัญหลัก

และสุดท้ายก็เป็นพวกกูรู้ในคราบนักวิชาการตามสถาบันเสริมสร้างปัญญา และตามหน่วยงานภาครัฐ หลายคนมีวิสัยทัศน์ และมุมมองที่ดี แต่ดีเกินไป คือเป็นพวกถวิลหาความสมบูรณ์แบบ (perfectionism) และมักเผยแผ่แต่ปัญญาที่เป็นอุดมคติ (idealism) เกินไป ไม่มองถึงความจริง หรืออาจมองไม่เห็นว่าโลกแห่งความเป็นจริงคืออะไร เพราะใช้ชีวิตอยู่ในอุดมคติมากเกินไป จนแยกแยะไม่ออกว่าอะไรจริง อะไรไม่จริง คิดสร้างหรือเผยแพร่แต่โครงการขี่ช้างจับตั๊กแตน โครงการตำน้ำพริกละลายแม่น้ำ โครงการขายผ้าเอาหน้ารอด โครงการลูบหน้าปะจมูก โครงการขายฝัน (เพ้อเจ้อ) และโครงการสร้างภาพ

คราวนี้ท้ายสุด ผู้มีส่วนได้-เสียที่มักเสียมากกว่าได้ เพราะเป็นกลุ่มบุคคลหลักที่จำเป็นต่อการทำงาน หรือเรียกได้ว่าเป็นกำลังหลักในโครงการ SOA เลยทีเดียว นั่นคือ นักวิเคราะห์ธุรกิจ (business analyst) และ สถาปนิกซอฟต์แวร์ (software architect) เพราะสองส่วนนี้คือกำลังสำคัญ ดังนั้นองค์กรต้องถามตนเองว่าในองค์กรมีใครไหมที่เป็น business analyst และ architect เพราะสองกลุ่มนี้ต้องเป็นคนขององค์กร ไม่ใช่คนที่ไปจ้างมา หรือเป็นคนที่พวกกูรู้จัดหามาให้ เพราะไม่มีใครที่จะวิเคราะห์และเข้าใจระบบงานหรือธุรกิจขององค์กรได้ดีไปกว่าคนภายใน
องค์กรเอง และไม่มีใครที่จะสร้าง architecture ที่จะใช้ในองค์กรได้ดีไปกว่าคนภายในองค์กรเอง ดังนั้น business analyst และ architect จึงต้องเป็นคนภายในองค์กร หากองค์กรยังไม่มี หรือไม่มีความพร้อมก็ต้องสร้างเขาเหล่านี้ขึ้นมาให้มีความพร้อม… ก่อนที่จะเริ่มทำ SOA!

ทำ SOA องค์กรต้องมีความพร้อมอะไรบ้าง

  1. ผู้บริหารต้องมีวิสัยทัศน์ด้านเทคโนโลยีและสถาปัตยกรรมซอฟต์แวร์ (technological and architectural visions) ที่ดี
  2. ตรวจสอบและติดตามกระบวนการจัดซื้อ/จัดจ้างอย่างใกล้ชิด เพื่อให้เกิดการทุจริต คอร์รัปชั่นน้อยที่สุดหรือไม่ให้มีเกิดขึ้นถ้าเป็นไปได้
  3. มีทีมที่ติดตามพฤติกรรมของผู้บริหารที่อาจมีการสุ่มเสี่ยงต่อการทุจริต คอร์รัปชั่น และต้องมีการดำเนินการโดยปราศจากเกมการเมืองภายในองค์กร หรือการเอื้อประโยชน์ซึ่งกันและกัน
  4. ฝ่ายไอทีขององค์กรต้องมีทีมพัฒนาซอฟต์แวร์ (software development team) ที่มีความรู้ ทักษะ และมีมาตรฐาน เพื่อจะได้รู้เท่าทันพวกกูรู้ต่าง ๆ
  5. มีการจัดการองค์ความรู้ (knowledge management) ที่ดี และสร้างฐานความรู้ (knowledge base) ที่ดีพร้อม ไม่ใช่ให้ความรู้อยู่กับคน แต่ความรู้ต้องอยู่กับองค์กร
  6. การทำงานระหว่างหน่วยงานภายใต้องค์กร เช่น แผนก ฝ่าย ต้องมีประสิทธิภาพ เพราะ SOA จำเป็นต้องทำร่วมกันโดยหลายฝ่าย มิใช่เพียงฝ่ายไอทีฝ่ายเดียว
  7. วัฒนธรรมองค์กรและวัฒนธรรมการทำงาน ที่ปราศจากการเมืองภายใน หรือมีให้น้อยที่สุด เพราะ SOA ไม่ใช่เป็นกิจกรรมของฝ่ายไอทีเพียงฝ่ายเดียว แต่เป็นกิจกรรมที่ต้องทำร่วมกันของหลายฝ่ายในองค์กร วัฒนธรรมองค์กรถือเป็นตัวชี้วัด (KPI) สำคัญต่อความสำเร็จหรือล้มเหลวของโครงการ SOA เลยทีเดียว หากวัฒนธรรมองค์กรอ่อนแอ ผุกร่อน หรือไม่พร้อม ก็ยังไม่ควรเริ่มกับ SOA
  8. ต้องมี (ทำ) Business Modeling หรือแบบจำลองธุรกิจหรือระบบงานขององค์กรที่ละเอียด ทำโดยคนขององค์กรเอง ไม่ใช่คนภายนอก หรือหากมีคนภายนอกด้วย คนภายนอกสามารถเป็นเพียงที่ปรึกษาได้เท่านั้น และไม่ใช่ทำแต่ Business Process เพราะเป็นเพียงศัพท์การตลาด และเป็นเพียงส่วนหนึ่งของการทำ Business Modeling เท่านั้น การวิเคราะห์และทำความเข้าใจกับ Business Process จึงถือว่าไม่เพียงพอ และมีรายละเอียดถือเป็นสัดส่วนน้อย เมื่อเทียบกับการทำ Business Modeling ที่มีความละเอียดและชัดเจนกว่า
  9. ต้องมี (ทำ) architecture ที่ดีและละเอียด ทำโดยคนขององค์กรเอง ไม่ใช่คนภายนอก หรือหากมีคนภายนอกด้วย คนภายนอกสามารถเป็นเพียงที่ปรึกษาได้เท่านั้น และต้องมีทีม architect ที่ดี มีความรู้และทักษะที่เพียบพร้อม ถ้าไม่มีต้องสร้างขึ้นมา อย่าหวังรับสมัครหรือหาจากคนภายนอก เพราะไม่มีทางหาได้ เพราะองค์กรต้องมี architect ที่มีความจงรักภักดี (loyalty) ต่อองค์กรที่ดี ดังนั้นจึงควรคัดเลือกและสร้างจากคนที่มีอยู่มากกว่าหาจากคนนอก
  10. มี Domain Expert หลาย ๆ ด้าน เช่น ด้านธุรกิจหรือระบบงานขององค์กร ด้านเทคนิค เป็นต้น
  11. กระบวนการพัฒนาซอฟต์แวร์ (software development process) ต้องมีวุฒิภาวะที่ดี แต่ไม่จำเป็นต้องมีใบประกาศนียบัตรรองรับ เช่น CMMi เพราะใบกระดาษพวกนี้ไม่ได้ยืนยันแท้จริงเสมอไป เพราะจำเป็นต้องสร้างวุฒิภาวะให้กับคนและองค์กรมากกว่า ไม่ใช่ไปมุ่งโฟกัสที่กระบวนการพัฒนาซอฟต์แวร์
  12. มีผู้นำหรือผู้ผลักดัน (motivator / champion) โดยมีความสามารถในการผลักดัน ชี้นำ กระตุ้น สนับสนุน ให้กำลังใจ มีทักษะด้านจิตวิทยามวลชนที่ดี เพื่อให้โครงการรุดหน้า สมาชิกทุกคนในทีมมีกำลังใจ ทำงานด้วยความสุข สนุก และมุ่งมั่น แต่ผู้นำไม่ใช่ทำตัวเป็นเพียงผู้ประสานงานเท่านั้น
  13. สร้างทีมเพื่อติดตามการทำงานของพวกกูรู้หรือกลุ่มบุคคลหรือบริษัทภายนอกที่จ้างให้เข
    ้ามาช่วยงาน เช่น ติดตั้งระบบซอฟต์แวร์ ฮาร์ดแวร์ หรือเข้ามาพัฒนางานบางส่วน หรือเข้ามาอบรมการใช้งานซอฟต์แวร์และฮาร์ดแวร์ ทีมนี้ต้องทำ ‘cross check’ โดยมีลักษณะเป็นทีมเงา (shadow team / shadow process) โดยห้ามมิให้พวกกูรู้หรือกลุ่มบุคคลหรือบริษัทภายนอกที่จ้างให้เข้ามาช่วยงานทราบได้ ว่าในองค์กรมีการจัดตั้งทีมนี้ขึ้นมาเพื่อตรวจสอบและติดตาม (monitor) การทำงานอยู่อย่างลับ ๆ เพื่อดูว่าพวกนั้นเขามีความรู้ ทักษะ และทำงาน ‘เป็น’ จริงหรือไม่ มีการหลบ ๆ เลี่ยง ๆ ลัด ๆ อ้อม ๆ มั่ว ๆ ตรงไหนบ้าง นอกจากนี้ทีมนี้ยังสามารถเป็น ‘architecture evaluator’ หรือผู้ประเมินผลการออกแบบและสร้าง architecture ได้อีกด้วย ซึ่งมีลักษณะเป็น quality assurance หรือ quality control นั่นเอง
  14. ต้องมีทีมวิจัยและพัฒนา (R&D) ที่แข็ง เพื่อจะได้รู้เท่าทันเทคโนโลยี และสามารถวิจัยพัฒนาเทคโนโลยีต่อยอด เพื่อความเหมาะสมต่อองค์กรได้ โดยไม่ต้องพึ่งพาพวกกูรู้หรือกลุ่มบุคคลหรือบริษัทภายนอกมากเกินไป และโดยเฉพาะหากองค์กรมีการใช้โอเพ่นซอร์สด้วย ยิ่งจำเป็นต้องมีทีมวิจัยและพัฒนาที่แข็งแกร่ง
  15. มีทีมทดสอบ (testing) ที่แข็งแกร่งและมีความเชี่ยวชาญสูง เพราะ SOA เป็น architecture แบบ distributed computing ดังนั้น transaction ส่วนมากจึงเป็นแบบ distributed transaction จึงต้องออกแบบการทดสอบและทดสอบให้มีประสิทธิภาพ นอกจากนี้ยังมีประเด็นอื่นมากมายที่ต้องทดสอบเช่น security, performance, availability, usability, reliability, integrability, interoperability, scalability เป็นต้น
  16. งานในส่วนตรรกะธุรกิจหรือระบบงานที่สำคัญ (business rule) ต้องทำโดยคนภายในองค์กรเอง หรือหากจำเป็นต้องให้คนภายนอกทำ เช่น กรณีมีการ outsource ต้องห้ามเปิดเผย implementation หรือเนื้อในวิธีคิดและการทำงานจริงให้คนภายนอกเห็นเด็ดขาด แต่ให้เปิดเผย API แทน ดังนั้นหมายความว่า business rule ต้องออกแบบและสร้าง (เขียนโปรแกรม) โดยคนภายในองค์กรเอง และควรมีการกำหนดทีมเฉพาะขึ้นมาทำในส่วนนี้ โดยมีเอกสาร ‘ห้ามเปิดเผยความลับ’ (non disclosure agreement) ให้สมาชิกในทีมทุกคนเซ็นรับทราบ
  17. ทำการแกะระบบฯ (ซอฟต์แวร์และแอพพลิเคชั่น) เก่าที่มีอยู่ (architecture reconstruction) เพื่อสร้าง portfolio หรือประวัติศาสตร์ (history) ของระบบฯ ทุกตัวที่มีอยู่ ซึ่งบางระบบฯ อาจจำเป็นต้องมีการทำเอกสารขึ้นมาใหม่ หากของเดิมไม่มีคุณภาพพอ และเพื่อศึกษา architecture ของระบบฯ ที่มีอยู่ในองค์กร เพื่อประเมินว่าจะต้องมีการปรับแก้ (re-architecting) ระบบฯ ใดบ้าง เพื่อให้สามารถ integrate กันได้ตามแนวคิด SOA และเพื่อประเมินว่ามีส่วนใดที่สามารถ reuse ได้ และไม่สามารถ reuse ได้ เช่นจำเป็นต้องพัฒนาใหม่หรือโละทิ้ง ทั้งนี้ใน portfolio ก็คือ asset หรือทรัพย์สินนั่นเอง เพราะระบบฯ ที่มีอยู่ต้องมองว่าเป็นทรัพย์สิน และจากนี้ต่อไปหากมีการทำ architecture และ SOA อย่างหนักหน่วงจริงจัง ทุกสิ่งจึงควรแปลงเป็นทรัพย์สินได้ และดังนั้นจึงต้องสามารถจัดเก็บได้ โดยอาจจัดเก็บ portfolio ไว้ในระบบ configuration management หรือหากจะให้เกิดประโยชน์สูงสุด ควรเก็บไว้ใน data warehouse และควรมีการทำ mining และ knowledge base เพื่อสนับสนุนการตัดสินใจ การบริหารไอทีในองค์กร การบริหารโครงการ การ estimate ราคา (งบประมาณ), คน ฯ เป็นต้น
  18. ทำ Software Product Lines (SPL) ซึ่งประเด็น SPL นี้จำเป็นอย่างมาก องค์กรจำเป็นต้องทำ SPL เพราะสิ่งที่อยู่ใน SPL คือ core asset base หรือ core architecture นั่นเอง เพราะ SOA เป็น architecture ที่เน้นการ integrate ระบบฯ ต่าง ๆ ดังนั้น เมื่อ SOA เข้ามาครอบคลุมระบบฯ และทรัพยากรไอทีของทั้งองค์กร องค์กรจึงต้องมี core architecture ที่ดีและมีประสิทธิภาพรองรับระบบฯ ต่าง ๆ ที่มีอยู่ และ solution logic และ service ต่าง ๆ ที่จะเกิดขึ้นในอนาคต ดังนั้นการทำ SPL ที่ดีจึงต้องมองไปยังอนาคตข้างหน้า พิจารณาและทำร่วมกันโดยฝ่ายบริหาร ฝ่ายไอที และถ้าองค์มีฝ่ายการตลาดก็ต้องให้ฝ่ายการตลาดร่วมทำด้วย

ลองสำรวจดูว่าองค์กรคุณมีข้อไหนบ้าง และไม่มีข้อไหนบ้าง และที่สำคัญการทำ SOA จะขาดข้อใดข้อหนึ่งไปไม่ได้ ดังนั้นกิจกรรมแรกก่อนหรือช่วงเพิ่งเริ่มทำ SOA ที่ต้องทำคือ ‘ประเมินสถานะองค์กร’ (assess organizational status) เพื่อประเมินความพร้อมขององค์กร และใช้เป็นข้อมูลเพื่อการตัดสินใจ

ทำ SOA ต้องรู้อะไรบ้าง?
จะขอกล่าวถึงเพียงสั้น ๆ โดยไม่อธิบายรายละเอียดในแต่ละประเด็น เพราะเกรงจะเป็น่การสร้างความท้อแท้ใจให้แก่ผู้อ่านและผู้สนใจ และผู้ที่กำลังทำหรือกำลังจะทำ SOA อยู่ โดยจะขอกล่าวถึงความรู้และทักษะของ architect หรืออาจเรียกว่าเป็น Service-Oriented Architect เท่านั้น เพราะเป็นหัวใจหลักของโครงการ SOA

ความรู้และทักษะที่จำเป็นที่ architect ต้องมีเพื่อทำ SOA คือ

  1. มีความจงรักภักดี (loyalty) ต่อองค์กร และคำนึงถึงผลประโยชน์ขององค์กรเป็นที่ตั้ง
  2. เข้าใจความหมายที่แท้จริงของคำว่า ‘งานบริการ’ และ ‘หัวใจของงานบริการ’
  3. Understanding Social and Political Issues เช่น เล่นการเมืองเป็น อ่านเกมการเมืองออก
  4. Consulting เช่น เป็นที่ปรึกษาที่ดีแก่ทุกคนในองค์กร มีทักษะการเป็นนักวิเคราะห์ที่ดี และมีทักษะในการลดข้อขัดแย้งระหว่างการสนทนาหรือการทำงาน
  5. Communication เช่น สื่อสารกับทุกคนได้ วิ่งได้ทั่วผังองค์กร จะขึ้นข้างบน ลงข้างล่าง ไปซ้ายข้ามแผนก ไปขวาข้ามฝ่าย ฯ และมีจิตวิทยาและศิลปะการสื่อสารที่ดี และมีทักษะภาษาที่ดี ทั้งพูด ฟัง อ่าน เขียน โดยเฉพาะภาษาไทย
  6. Strategy เป็นนักกลยุทธ์และมีความคิดเชิงกลยุทธ์ที่ดี
  7. Lateral Thinking รู้จักคิดนอกกรอบ มองโลกในแง่ดี และแง่ร้ายเป็น เข้าใจทั้งสภาวะภายในและภายนอก
  8. Integrated Thinking คิด วิเคราะห์ ออกแบบ และปฏิบัติเชิงบูรณาการ
  9. Marketing เข้าใจหลักการประชาสัมพันธ์ การสื่อสารองค์กร มองเกมการตลาดออก และรู้จักใช้การตลาดเป็นเครื่องมือ
  10. Knowledge Transfer สามารถถ่ายทอดองค์ความรู้ให้ผู้อื่นได้ เช่น สมาชิกภายในทีม และต้องพัฒนาความรู้และทักษะของตัวเองอย่างต่อเนื่อง โดยสามารถกระตุ้นและบังคับตัวเองได้ โดยไม่ต้องรอให้ใครมาบังคับ
  11. มีภาวะผู้นำสูง
  12. Object-Orientation
  13. Object-Oriented Analysis and Design
  14. UML
  15. Aspect-Oriented Programming (AOP)
  16. Agile Philosophy เปรียบเทียบอีกอย่างนั่นคือ เข้าใจหลักปรัชญาเศรษฐกิจพอเพียง และดำเนินกิจกรรมทุกอย่างอยู่บนหลักแห่งความพอเพียง
  17. Business Modeling
  18. Software Engineering
  19. Software Development Process โดยเฉพาะต้องเป็น development life cycle แบบ Iterative and Incremental Development (IID) เท่านั้น
  20. Design Patterns and Architectural Patterns
  21. Software Architecture
  22. Enterprise Architecture
  23. Domain Modeling, Domain Specific Language and Domain Driven Architecture
  24. Event-Based Architecture
  25. Component-Based Architecture
  26. Enterprise Application Integration (EAI)
  27. Software Product Lines
  28. Distributed Computing
  29. Distributed Transaction Design and Management
  30. Security
  31. Architecture Reconstruction
  32. Architecture Evaluation
  33. Components Off-The-Shelf (COTS) Decision
  34. Software Testing ควรเป็นแบบ Test Driven Development
  35. มี Perspective Positioning ด้านเทคโนโลยีที่ดี
  36. Requirements Management โดยเฉพาะด้าน Business Goals และ Non-Functional Requirements
  37. Configuration and Change Management
  38. Principle Design for High Available and Interoperable Architecture
  39. Internet Protocol, Architecture and Web Services
  40. BPEL (Business Process Execution Language) and Enterprise Service Bus (ESB)

แล้วลองถามองค์กรดูว่ามีใครที่มีความรู้และทักษะเหล่านี้ไหม ไม่จำเป็นต้องมีทั้งหมดในตัวคนคนหนึ่ง เพราะ SOA ต้องมี ‘Domain Expert’ หลาย ๆ ด้านมาช่วยกันทำ แต่ที่แน่ ๆ สำหรับ architect ในโครงการ SOA ควรมีทักษะเหล่านี้!

บางคนที่เห็นแล้วอาจหัวเราะ เช่นพวกกูรู้หลายคนที่ผมเคยเล่าให้ฟัง “ว่ามันจะเป็นไปได้อย่างไร” “จะไปหามาจากไหน” “จะสร้างขึ้นมาอย่างไร” ฯลฯ ก็จะไม่ให้หัวเราะได้อย่างไร ซึ่งผมก็เข้าใจ เพราะคนเหล่านั้นชอบดูถูกลูกค้าและนักพัฒนาตาดำ ๆ เป็นปกติอยู่แล้วนี่ ก็เลยชอบหาอะไรมายัดเยียดให้เขาใช้ ให้เขาเรียน แล้วก็ดูถูกผ่านข้ออ้างว่า “เพราะคนไทยไม่รักการศึกษา” “สังคมมันแย่” “สร้างยาก” “จะได้ให้เขาได้ทำในส่วนสำคัญจริง ๆ” “เพื่อให้เขาไปต่อยอดได้” “ต้องลงทุนสูง” “เป็นปัญหาเรื่องคน มันแก้ยาก” ฯลฯ

แต่ผมขอยืนยันว่า… คนที่มีความรู้และทักษะเหล่านี้สามารถสร้างได้! ถ้าคิดจะสร้าง เพราะกิจกรรมที่สำคัญที่สุดของโครงการ SOA คือ สร้างความพร้อม! และ output ที่สำคัญที่สุดของการสร้างความพร้อมคือ Service Inventory Blueprint ซึ่งรวบรวม policy, standard, service design ฯลฯ มากมาย และเครื่องมือที่สำคัญที่สุดที่ใช้สร้างคือ คน และเครื่องมือที่สำคัญที่สุดที่คนต้องใช้คือ กระดาษและปากกา หรือจะใช้โปรแกรม word processing ก็ได้

องค์กรต้องสร้าง Service Inventory Blueprint ขึ้นมาก่อน เพราะเปรียบเสมือนพิมพ์เขียวของ ‘คลังบริการ’ ขององค์กร อธิบายโครงสร้าง การทำงานของ service ระเบียบการเข้าใช้ การจัดเก็บ สิทธิ รายละเอียดของ service ทุกตัว รวมถึง service level agreement ของ service ทุกตัว การจัดทีม แบ่งทีม การกำหนดและเลือกใช้เทคโนโลยี ฯลฯ นอกจากนี้ยังรวมถึงแผนการใช้เงิน (งบประมาณ) เหล่านี้ไม่จำเป็นต้องง้อเครื่องมือราคาแพงใด ๆ เลย!

เมื่อสร้าง Service Inventory Blueprint เสร็จแล้ว ถึงช่วงที่จะต้องอิมพลีเม้นต์ จึงค่อยมาดูเรื่องเครื่องไม้เครื่องมือ อุปกรณ์ซอฟต์แวร์ ฮาร์ดแวร์ การลงทุนการตั้งงบฯ การวางแผนงาน ถึงตอนนี้จะซื้อเครื่องมือราคาแพงใด ๆ หรือจะเลือกพัฒนาเอง หรือจะใช้โอเพ่นซอร์ส ก็ได้ เพราะเมื่อเหนื่อยกับการทำ Service Inventory Blueprint จนเสร็จและสมบูรณ์ได้เมื่อไร ถือว่าองค์กร… มีความพร้อมแล้ว!

ทิ้งท้าย
สุดท้าย… SOA จะมีประโยชน์และคุ้มค่าหรือไม่ องค์กรต้องมีความพร้อมและใจเย็น ๆ เพื่อสร้างภูมิคุ้มกันไม่ให้บกพร่องเสียก่อน และเพื่อให้ปลอดภัยจากโฆษณาขายฝันและการเข้ามากอบโกยจากพวกกูรู้ทั้งหลาย แล้วเมื่อองค์กรพร้อมก็สามารถเรียกตนเองได้ว่าได้เป็นพวก ‘กูรู้กว่า’ จะหยิบใช้พวกกูรู้นอกองค์กรได้อย่างเกิดผลยิ่ง ราวกับวาทยากร (service orchestrator!) แล้วท้ายสุดคนที่เดินเกมและกุมอำนาจแท้จริงก็คือ ‘ลูกค้า’!

แล้ว… architect จะหาอย่างไร? จากใครในองค์กร? ต้องเก่งแค่ไหน? จบอะไรมา? อายุเท่าไร? ประสบการณ์แค่ไหน? ฯลฯ

ขอตอบสั้น ๆ ว่า architect วัดกันที่ วิสัยทัศน์ ทัศนคติ และการพลิกแพลงกลยุทธ์!

- ความรู้และความสามารถสร้างและปรับกันได้ แต่วิสัยทัศน์และทัศนคติสร้างและปรับได้ยากกว่า -

และ

- คนเราหากอยากเป็นอะไร ตัวเขาเท่านั้นที่รู้ตัวเองดี ไม่ต้องรอให้ใครมาจับไปปั้นแต่ง
หากไม่ท้อถอย กัดไม่ปล่อย เขาก็จะได้เป็นในสิ่งที่อยากเป็น ด้วยตัวของเขาเอง -

………………………………………………
หลงเอยหลงไขว่คว้า ฟายฝัน
หลงผิดคิดว่าจันทร์ แค่เอื้อม
หลับใหลมิรู้วัน วายวิ่น
เพียงแผ่นน้ำกระเพื่อม เสื่อมสิ้น เงาสลาย
………………………………………………
“หนึ่งหยดน้ำหลับใหลในสายน้ำ”, ชนะ คำมงคง

minimalist (ณรงค์ จันทร์สร้อย ๑ พฤษภาคม พ.ศ. ๒๕๕๑)

20
เม.ย.
08

ทำความเข้าใจกับ ‘Software Architecture’ เชิงเปรียบเทียบกัน

ปัจจุบันยังไม่มีนิยามสำหรับ ‘Software Architecture’ ที่ชัดเจนดีพอ และคำจำกัดความหรือความหมายที่มีอยู่ตามเว็บไซต์และตำรา ต่างสร้างความสับสนกำกวมให้แก่ผู้สนใจไม่น้อย มีผู้สนใจและผู้ที่ต้องการศึกษา software architecture มากมายที่แสวงหานิยามอมตะซึ่งใช้เพียงไม่กี่ประโยคเพื่อแทนความหมายของ software architecture ได้ชัดเจนที่สุด

แต่จะแสวงหานิยามไปเพื่ออะไรกัน? นิยามที่อยู่ในรูปประโยคเพียงไม่กี่ประโยค จะหวังให้สื่อถึงแก่นสาระทั้งมวลอาจไม่ได้เสมอไป โดยเฉพาะกับศาสตร์ที่ยังมีขวบวัยเพียงในระดับหนึ่งเท่านั้น ดังจะเห็นได้ว่ามีการตีความกันไปต่าง ๆ นานา ดังนั้นจงใช้หลัก ‘กาลามสูตร’ ของพระพุทธเจ้าเพื่อเป็นเกณฑ์ในการเลือกที่จะเชื่อในเนื้อความที่ได้อ่านหรือสดับมา

ผมจะขออธิบายความหมายของ ‘สถาปัตยกรรมซอฟต์แวร์ (software architecture)’ ในเชิงเปรียบเทียบกับร่างกายของมนุษย์ คำตอบแห่งหลายสิ่งในจักรวาลล้วนสามารถเริ่มต้นได้จากการเพ่งศึกษาในตัวตนก่อน ตามหลักแห่งพุทธแล้ว คำถามที่ยากจะแสวงหาคำตอบ ดิ้นรนฝ่าฟันทุกทิศก็ใช่จะหาความหมายที่ชัดเจนถูกใจได้ยาก แต่หากตั้งสติให้นิ่งแทนที่จะคอยแต่มองออกไปภายนอก บางครั้งคำตอบที่เราต้องการอาจอยู่ภายในตัวเรานี่เอง

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

เราอาจเคยได้ยินประโยคที่ว่า “มนุษย์เป็นสัตว์สังคม” เมื่อคนเรามารวมกลุ่มกันก็ต้องมีกฏเกณฑ์มีสังคม ในปัจจุบันเรามีสังคมที่หลากหลาย และมีธุรกิจอุตสาหกรรมที่หลากหลาย เช่น ธุรกิจสิ่งทอ เกษตรกรรม เทคโนโลยี ประกอบรถยนต์ โรงพยาบาล เป็นต้น โดยในแต่ละสังคมธุรกิจล้วนต้องมีคนเข้าไปมีส่วนร่วม มีการใช้คนที่หลากหลายซึ่งสอดคล้องกับเกณฑ์ที่หลากหลาย เช่น อายุ การศึกษา ประสบการณ์ เป็นต้น

ในแต่ละสังคมคือโดเมน (domain) หนึ่งนั่นเอง ในโดเมนจึงสามารถมีโดเมนย่อยต่อไปได้อีก โดเมนหนึ่งก็อาจอยู่ภายในโดเมนหนึ่งที่ใหญ่กว่าได้ แล้วเกณฑ์ที่ใช้ในการจำแนกขนาดและประเภทโดเมนคืออะไร? นี่คือกฏเกณฑ์ของสังคมนั้น ๆ เป็นผู้กำหนด แต่สิ่งสำคัญอยู่ที่มุมมอง (perspective) ของผู้มองเองด้วย เพราะในสังคมที่มีลักษณะคล้ายคลึงกันราวกับฝาแฝด แต่อาจมีกฏเกณฑ์ที่แตกต่างกันอย่างสิ้นเชิงก็เป็นได้

ใครสักคนหนึ่งเมื่อต้องเข้าไปอยู่ในสังคมหนึ่ง เช่น นาย ก ได้สมัครเข้าทำงานเป็นพนักงานขายอุปกรณ์เลี้ยงปลา สิ่งที่ทางร้านต้องการจากนาย ก คือความสามารถ (feature) ในการขาย และความรู้การเลี้ยงปลาและอุปกรณ์เบื้องต้น โดยทางร้านได้ระบุความสามารถของนาย ก ว่าต้องมีอะไรบ้างในการทำงาน เพื่อให้สอดคล้องกับโมเดลธุรกิจ (business model) ของทางร้าน ทางร้านจึงจำเป็นต้องมีการฝึกอบรมเบื้องต้นให้แก่นาย ก เพื่อให้เข้าใจเป้าหมายธุรกิจ (business goals) ที่สัมพันธ์กับโมเดลธุรกิจของทางร้าน

แม้ว่านาย ก สามารถทำอะไรอย่างอื่นได้อีกมากมาย เช่น ขับรถ ว่ายน้ำ เล่นฟุตบอล ตีกลอง ฯลฯ ก็ไม่มีความจำเป็นต่องานเท่าใดนัก ดังนั้นนาย ก จึงต้องทำความเข้าใจกับโมเดลธุรกิจ เป้าหมายธุรกิจ และความสามารถหรือหน้าที่ที่ตนเองต้องทำ เพราะเหล่านี้คือความต้องการ (requirements) ที่ทางร้านคาดหวังในตัวเขา

จากการฝึกอบรม นาย ก พบว่างานขายอุปกรณ์เลี้ยงปลานั้นตนเองต้องสามารถอธิบายข้อมูลให้แก่ลูกค้าได้ ใช้อุปกรณ์ในร้านทุกชนิดเป็น ซ่อมอุปกรณ์ชิ้นง่าย ๆ ได้ ให้อาหารปลาในตู้ปลาที่โชว์ ทำความสะอาดตู้ปลา บรรจุหีบห่อ นำรถเข็นมายกอุปกรณ์ชิ้นใหญ่ไปส่งที่รถลูกค้า และรับเงินและคืนเงินทอน เหล่านี้คือความต้องการ (functional requirements) ของทางร้านที่ต้องการให้เขาทำ

ร่างกายของมนุษย์มีระบบการทำงานหลายประเภท แต่ละประเภทประกอบด้วยอวัยวะที่ซับซ้อน อวัยวะหลายส่วนมักทำงานร่วมกันและตอบสนองซึ่งกันและกัน เช่น ระบบหายใจประกอบด้วย จมูกที่หายใจนำอากาศผ่านลำคอเข้าสู่ปอดและหัวใจ ปากที่นำอาหารที่ทานผ่านลำคอ (ใช้ร่วมกันกับระบบหายใจ) สู่กระเพาะและสู่ลำไส้ เป็นต้น

ดังนั้นหากวาดเป็นรูปออกมาแล้วจะเห็นได้ว่าร่างกายมนุษย์เรามีระบบการทำงานมากมายและ
ซับซ้อนอย่างยิ่ง หากอวัยวะใดหรือระบบใดทำงานผิดเพี้ยนไปอาจส่งผลต่ออวัยวะหรือระบบการทำงานอื่นได้ เช่น หากสูบบุหรี่มากจะเป็นการสร้างความเสียหายให้กับปอด เมื่อปอดมีปัญหาก็จะฟอกอากาศได้แย่ลง ส่งผลต่อหัวใจและระบบหายใจ หากไตมีปัญหาก็อาจทำให้เป็นนิ่วได้ หากกระเพาะมีปัญหาก็อาจส่งผลต่อระบบย่อยอาหารได้ หากระบบประสาทบริเวณไขกระดูกสันหลังมีปัญหาอาจเป็นอัมพาตได้ หากระดับน้ำในหูมีปัญหาอาจส่งผลต่อการทรงตัวได้ เป็นต้น

ระบบการทำงาน หรือ กลไก (architectural mechanism) ภายในร่างกายส่วนใดส่วนหนึ่งประสบปัญหาจึงมักส่งผลข้างเคียง (side effect) ต่อระบบการทำงานและอวัยวะอื่นด้วยเสมอ และเมื่อระบบการทำงานใดทำงานผิดปกติไปก็จะส่งผลต่อความสามารถของคนนั้น หรือสิ่งที่คนนั้นจำเป็นต้องทำ (functional requirements) ไปด้วย เช่น วันหนึ่งนาย ก ไปตรวจสุขภาพ ผลการตรวจพบว่าเป็นโรคผิวหนัง เนื่องจากภูมิแพ้จากการทำความสะอาดตู้ปลาบ่อย ๆ แต่ล้างมือไม่สะอาด นาย ก จึงนำผลการตรวจไปแจ้งเจ้าของร้าน เจ้าของร้านจึงสั่งไม่ให้นาย ก ล้างตู้ปลา 1 สัปดาห์แล้วหักเงินค่าจ้างเพื่อทำโทษที่ไม่ยอมดูแลรักษาสุขภาพให้ดี

นอกจากนี้นาย ก ต้องเริ่มทำงานแต่เช้า ต้องเข้างานตรงเวลา (ความน่าเชื่อถือ – reliability) ในการอธิบายสินค้าแก่ลูกค้าต้องใช้เวลาที่สั้น กระชับ และทำให้ลูกค้าตัดสินใจซื้อได้เร็ว (ประสิทธิภาพ – performance) เพราะหากเป็นช่วงเวลาที่มีลูกค้าที่ร้านมาก นาย ก ยิ่งต้องอธิบายได้รวดเร็ว ชัดเจนมากยิ่งขึ้น และยังต้องรักษาสุขภาพ ไม่เจ็บไข้ได้ป่วยจนทำให้ต้องขาดงานบ่อย (ความพร้อม – availability) ต้องคอยศึกษาอุปกรณ์รุ่นใหม่ ๆ ที่มาแทนรุ่นเก่า (ปรับปรุง – modifiability) และทางร้านต้องสามารถตรวจสอบประเมินผลการทำงานได้ (ทดสอบ – testability) นี่คือความต้องการที่ทางร้านกำหนด และนาย ก ได้คิดเพิ่มเติมอีกว่าตนเองจะต้องพัฒนาทักษะความรู้อย่างต่อเนื่อง เพื่อจะได้ก้าวหน้าและเติบโตในหน้าที่ที่สูงขึ้นที่มีความรับผิดชอบที่มากขึ้นต่อไปไ
ด้ (ขยาย – scalability) ความต้องการเหล่านี้คือ สิ่งที่ใช้ชี้วัดคุณภาพการทำงานของนาย ก เป็นความต้องการที่ไม่ใช่หน้าที่โดยตรง (non-functional requirements) แต่มีความผลต่อหน้าที่รับผิดชอบ

ระบบการทำงานของร่างกาย (กลไก) ที่สำคัญที่ส่งผล (support) ต่อการทำงาน (functional requirements) ของนาย ก เช่น ระบบหายใจ (ต้องดมกลิ่นปลา กลิ่นตอนล้างตู้ปลาบ่อย ๆ) ระบบผิวหนัง (ต้องสัมผัสปลา อาหารปลา และตอนล้างตู้ปลา) ระบบสมอง (เรียนรู้ ท่องจำ คิด ฯลฯ) เป็นต้น หากระบบเหล่านี้ทำงานผิดพลาดจะส่งผลต่องานของนาย ก เมื่อนาย ก ทำงานผิดพลาดหรือมีประสิทธิภาพแย่ลง ก็จะส่งผลต่อหน้าที่การงานของนาย ก เอง และต่อธุรกิจของทางร้าน ดังนั้น non-functional requirements จึงมีผลต่อการทำงานของกลไกและการกำหนดระดับความสำคัญ (prioritize) ของกลไกต่าง ๆ หรือกล่าวได้ว่า non-functional requirements นำไปสู่การกำหนดกลไกที่จะมีในระบบฯ และเป็นตัวชี้วัดคุณภาพการทำงานของกลไก ซึ่งแน่นอนเมื่อกลไกทำงานได้ดี ย่อมส่งผลต่อการทำงาน (functional requirements) ได้ดีตามไปด้วย

จากการอธิบายในเชิงเปรียบเทียบนี้ เห็นได้ว่าสิ่งที่อยู่ใน ’software architecture’ คือ กลไกสำคัญที่มีผลต่อระบบฯ จากตัวอย่างข้างต้นระบบฯ ก็คือตัวนาย ก นั่นเอง

ประเด็นสำคัญคือการสร้างระบบฯ ต้องถูกตีกรอบด้วยโดเมน หรือเกณฑ์การจำแนกของสังคมนั้น ๆ เพราะบางกลไกที่มีความสำคัญต่อโดเมนหนึ่งแต่อาจไม่มีความสำคัญต่ออีกโดเมนก็ได้ เมื่อทราบแล้วว่าระบบฯ นั้นถูกจัดกลุ่มอยู่ในโดเมนใด จึงต้องกำหนดความต้องการของโดเมนหรือเป้าหมายทางธุรกิจ (business goals) นั้น กำหนดโดยผู้ที่มีผลต่อความสำเร็จหรือล้มเหลว (ผู้มีส่วนได้เสีย) (stakeholders) ภายในโดเมนนั้นเอง ไม่ใช่กำหนดโดยผู้ที่เข้าไปทำระบบฯ ให้ เมื่อโดเมนนั้นทราบแล้วว่าโมเดลธุรกิจและเป้าหมายทางธุรกิจของตนคืออะไร จึงจะกำหนดความสามารถ (feature) ของระบบฯ โดยจะกำหนดเอง หรือให้คนที่จะทำระบบฯ ให้กำหนด หรือจะกำหนดร่วมกันก็ได้ จากนั้นจึงกำหนดความต้องการ (functional requirements) ที่คาดหวังจากการทำงานของระบบฯ แต่ระบบฯ จะมีคุณภาพหรือไม่? แค่เพียงระบบฯ ทำงานได้นั้นไม่เพียงพอจะกล่าวได้ว่าระบบฯ มีคุณภาพ

จากตัวอย่างเปรียบเทียบ หากระบบการทำงานบางอย่างผิดปกติไปอาจส่งผลต่อความสามารถบางอย่างของมนุษย์ได้ นั่นคือ กลไกมีผลต่อความสามารถ (functional requirements) และหากนาย ก ยังไม่ยอมล้างมือให้สะอาดหลังจากล้างตู้ปลา อาจทำให้เป็นโรคผิวหนังเรื้อรัง และส่งผลต่อการทำงาน ซึ่งอาจทำให้นาย ก ถูกพักงานหรือต้องลางานไปรักษาตัวบ่อยขึ้น ฉะนั้นอาจทำให้คุณภาพการทำงานของนาย ก ตกลง และหากนาย ก ไม่ฝึกฝนการอธิบายรายละเอียดสินค้าแก่ลูกค้าให้ดี ก็อาจส่งผลต่อประสิทธิภาพและความน่าเชื่อถือไป นั่นคือ functional requirements และ non-functional requirements มักตอบสนองซึ่งกันและกันเสมอ

คุณภาพของระบบฯ ขึ้นอยู่กับประสิทธิภาพของการทำงานของกลไกในสถาปัตยกรรมฯ หรือกล่าวได้ว่าขึ้นกับสถาปัตยกรรมฯ ของระบบฯ นั่นเอง สถาปัตยกรรมฯ ที่ดีต้องทำให้ระบบฯ ทำงานได้ตาม functional requirements และ non-functional requirements ความต้องการทั้งสองประเภทนี้ต้องสอดคล้องกับความสามารถ (feature) ที่ผู้ทำระบบฯ ได้รับปาก (commit) กับเจ้าของระบบฯ (หรือโดเมนนั้น หรือลูกค้า) ไว้ และเมื่อระบบฯ ทำงานได้ตาม feature ที่ได้รับปาก ก็จะส่งผลได้ตรงตามเป้าหมายทางธุรกิจที่กำหนดไว้แต่แรก

ความสัมพันธ์จากเป้าหมายทางธุรกิจจนถึงสถาปัตยกรรมฯ และท้ายที่สุดจนถึงระบบฯ ที่สร้างเสร็จแล้ว เรียกว่า ‘Architecture Business Cycle’ (ABC) ซึ่งในทางกลับกันระบบฯ ที่สร้างเสร็จแล้วต้องตอบสนองได้ตรงตามเป้าหมายทางธุรกิจด้วยเช่นกัน

ดังนั้นจะเห็นได้ว่าหากสถาปัตยกรรมฯ มีคุณภาพ ระบบฯ ก็จะมีคุณภาพ โดยปัจจัยสำคัญต่อคุณภาพของสถาปัตยกรรมฯ คือ เป้าหมายทางธุรกิจ เพราะเป็นความต้องการที่สำคัญที่สุดและเป็นเสมือนกรอบการทำงานทั้งหมด และ non-functional requirements เพราะเป็นปัจจัยหลักนำไปสู่การกำหนดและสร้างกลไก

สถาปัตยกรรมซอฟต์แวร์ จึงเน้นที่การทำงานร่วมกันของกลไกสำคัญต่าง ๆ ภายในระบบฯ ที่มีผลต่อการทำงานและเป้าหมายทางธุรกิจ

เฉกเช่นร่างกายมนุษย์ หากระบบประสาทเสียหาย โดยที่อวัยวะอื่นยังทำงานปกติ แต่ถ้าเป็นอัมพาต แม้กำลังนอนอยู่ก็ไม่อาจกล่าวได้ว่าเป็นการนอนโดยแท้จริง….

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

เรามีสถาปัตยกรรมที่วิเศษที่สุดในจักรวาลอยู่ในตัวเรานี่เอง….

=======================================================================

ยาวเหยียด เฮ้อ…. smile.gif
เป็นส่วนหนึ่งของหนังสือที่กำลังเขียนอยู่ครับ พอดีได้ไอเดียจากที่มักใช้มุขอวัยวะในร่างกายคนเราอธิบายเชิงเปรียบเทียบกับ software architecture อยู่่บ่อย ๆ ในงานบรรยาย เลยเอามาเขียนลงรายละเอียดหน่อยดีกว่า
แต่ยังไม่ค่อยกระชับเท่าไรนะครับ เอาไว้ถึงช่วงเรียบเรียงเรียบร้อยแล้วจะมาอัพเดตอีกทีพร้อมรูปประกอบ

อ้อ… ช่วย comment หน่อยนะครับ smile.gif

minimalist (ณรงค์ จันทร์สร้อย ๒๐ เมษายน พ.ศ. ๒๕๕๑)