The Five Ideals

Share
The Five Ideals

จากหนังสือ The Unicorn Project ในนั้นจะมีที่ปรึกษาเก่ง ๆ คนหนึ่งชื่อ Erik เป็นเหมือนเซ็นเซหาตัวยาก เดี๋ยวก็มา เดี๋ยวก็ไป ถ้าโชคดีก็จะเจอเค้าว่าง แล้วเค้าก็จะสอนอะไรที่สำคัญ ๆ แต่ฟังดูล้ำ ๆ และลึกซึ้ง จนตัวละครในเรื่องต้องใช้เวลาขบคิดนานกว่าจะเข้าใจ

สิ่งหลัง ๆ ที่ Erik สอนในเรื่องนี้คือ The Five Ideals เป็นเหมือนภาพในฝันสำหรับองค์กรที่พัฒนาซอฟต์แวร์ ต่อจากนี้จะเป็นความเข้าใจของผมที่มีต่อแต่ละ ideal

The first ideal: Locality and Simplicity

ผมได้เรียนรู้ locality จากคอร์ส Building Microservices ที่เรียนกับ Sam Newman การที่เราแยกของบางอย่างเป็น private (information hiding) ให้ความยืดหยุ่นกับเรา เพราะถ้ามันเป็น private เวลาเราเปลี่ยนแปลงมัน เราไม่ต้องกลัวว่าคนอื่นจะได้รับผลกระทบ

ถ้าเป็นของที่เป็น public เวลาจะเปลี่ยน ต้องสร้างสะพานใหม่ก่อน ประกาศให้ทุกคนรู้ว่าให้ย้ายไปใช้สะพานใหม่ และเมื่อสะพานเก่าไม่มีคนใช้แล้ว เราค่อยทุบสะพานเก่าทิ้ง หลัก ๆ คือการทำ backward compatibility นี่แหละ Versioning ก็เป็นเทคนิคหนึ่งในนั้น แต่ตัวอย่างที่ผมยกไม่ได้พูดถึงแค่การ integrate code กับ environment แต่หมายรวมถึงการ integrate กับพฤติกรรมของ user เลย

ส่วนเรื่อง simplicity เป็นหลักการที่ผมพยายามยึดเวลาออกแบบซอฟต์แวร์อยู่แล้ว เพราะผมยอมรับว่าผมไม่มีทางเดาถูกว่าอนาคตจะต้องเปลี่ยนแปลงจุดไหนของซอฟต์แวร์ ไหน ๆ ก็ทำ TDD ให้มี unit test coverage ครอบคลุมโค้ดทั้งหมดแล้ว ฉะนั้นจะไม่ design เผื่อว่าอะไรจะเปลี่ยนเลย เอาให้มัน simple เข้าไว้ วันที่มันจำเป็นต้องซับซ้อนขึ้นจะได้ไม่ยากเกินไป

The second ideal: Focus, Flow and Joy

Mihaly Csikszentmihalyi เป็นคนคิด concept เรื่อง flow ในชีวิตเรา ถ้าเราเรียงสิ่งที่เราทำจากง่ายไปยาก มันจะมีตั้งแต่ comfort zone ก่อน ที่ทำไปวัน ๆ ไม่ได้เก่งขึ้น พอเลยไปอีกเอื้อมมือหนึ่ง นั่นแหละคือ flow เป็นเป้าหมายที่เกินขอบของ comfort zone ไปนิดหนึ่ง เวลาทำต้องใช้สมาธิสูงมาก เพื่อจะอยู่กับลมหายใจ และพยายามผ่อนคลาย ไม่เกร็ง เพื่อเราจะได้ perform ได้อย่างสุดฝีมือ การอยู่ใน zone นี้ การันตีเลยว่าคืนนั้นหลังจากนอนหลับ ร่างกายจะสร้างการเชื่อมโยงของระบบประสาทใหม่ ๆ และพรุ่งนี้เราจะทำมันได้ดียิ่งขึ้น

อีกธรรมชาติหนึ่งที่น่าสนใจของ flow zone คือ เวลาเราอยู่ตรงนั้น มันจะเป็นตรงที่ไม่รู้ว่าฉันจะทำสิ่งนี้ได้ไหม แต่อยากลอง ซึ่งเวลาอยู่ตรงนั้นมันมักจะสนุก (Joy)

ถ้าข้าม flow zone ไป จะเป็น zone ท้าทาย เป็นบริเวณที่ถ้าทำ 10 ครั้งจะพลาดสัก 8 แต่ 2 ครั้งที่ทำได้จะภูมิใจมาก ๆ ถือเป็นขอบบนของ flow ละ สำหรับคนที่เข้มงวดกับตัวเองมาก ๆ ขอบบนนี้มาแตะบ้างได้ แต่อยู่นานไม่ได้ มันทำอย่างสม่ำเสมอแบบยั่งยืนไม่ไหว

แต่ถ้าไปไกลกว่านั้นอีกนิด เรียกว่าทรมานตัวเองละ ถือว่าเกิน flow ไปละ เป็น zone เครียดและกดดัน ไม่เหมาะกับการเรียนรู้

The third ideal: Improvement of Daily Work

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

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

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

The fourth ideal: Psychological Safety

สัตว์ต่าง ๆ จะเล่น ก็ต่อเมื่อปลอดภัย

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

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

ในองค์กรที่มี psychological safety คนจะกล้าคิด กล้าตัดสินใจ และได้เรียนรู้จากการตัดสินใจนั้น แต่ถ้าองค์กรขาด psychological safety คนจะไม่กล้าตัดสินใจ และจะรอ confirm กับหัวหน้า ทุก ๆ การตัดสินใจก็จะค่อย ๆ รวมขึ้นมาหาผู้บริหารระดับบน ๆ ทำให้เกิด bottleneck ของการตัดสินใจ และทั้งองค์กรจะขยับช้าลง

The fifth ideal: Customer Focus

ถ้ามีงานหนึ่งชิ้นที่ลูกค้ารออยู่ ถ้า upstream ทำเสร็จ เราอยากให้ downstream เอางานนั้นไปทำต่อเลย เพื่อไม่ให้ลูกค้าต้องรอนาน

แต่ถ้าเราไม่ให้งานรอคนทำงานว่าง แปลว่าเราต้องให้คนทำงานรองานมาถึง การจะทำแบบนั้นได้ พนักงานต้องมี slack time ที่จะรองานที่กำลังจะมาถึง

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

Customer focus เป็นด้านตรงข้ามของ shareholder focus นั่นคือ ถ้าเราเลือกจะมาทางนี้ เรากำลัง optimize สำหรับ growth ไม่ใช่ profit

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

ความยากของ ideal นี้คือ มันจะ work ไม่ได้ ถ้าพนักงานเราไม่รู้สึกปลอดภัยจาก ideal ที่ 4 ก่อน เพราะเราต้องใส่หน้ากากออกซิเจนให้ตัวเองก่อน แล้วถึงจะไปช่วยคนอื่นได้

สรุป

นี่แหละ ideal ทั้ง 5 ที่ Erik สอนทีมงานสำหรับการพัฒนาซอฟต์แวร์ เป็นหลักการบริหารสำหรับองค์กรที่ทำซอฟต์แวร์ ซึ่งสอดรับกับผลงานวิจัยด้าน motivation และแนวคิดการบริหารสมัยใหม่หลาย ๆ อย่าง

อ้างอิง

https://www.danpink.com/wp-content/uploads/2013/07/FLIP-Manifesto.pdf

Read more

Communication, Reliability and Modern concepts - System Design, Simply Explained

Communication, Reliability and Modern concepts - System Design, Simply Explained

บทความนี้จะอธิบายพื้นฐานของ System Design โดยต่อยอดจากตัวอย่าง Gym Application เพื่อให้เห็นภาพว่า เมื่อระบบเริ่มเติบโตและถูกแยกออกเป็นหลาย Service แต่ละ Service จะสื่อสารและทำงานร่วมกันอย่างไร งานแบบไหนควรสื่อสารแบบ Synchronous งานแบบไหนควรประมวลผลแบบ Asynchronous รวมถึงอธิบาย Concept พื้นฐานต่าง ๆ ที่ควรรู้ เช่น API

By Boonsong Srithong
Race condition

Race condition

ผมกำลังอ่านหนังสือ The Unicorn Project ซึ่งเป็นนิยายเกี่ยวกับ developer สาวคนหนึ่งที่ใช้ชีวิตในองค์กรท่ามกลางกระแส digital disruption อ่านแล้วสนุกมาก เป็นเรื่องที่ตื่นเต้น และหลาย ๆ dynamic ที่เกิดขึ้นก็คล้ายกับที่ผมพบเจอในบริษัทซอฟต์แวร์ เลยทำให้

By Chokchai Phatharamalai
Distributed Systems Concepts - System Design, Simply Explained

Distributed Systems Concepts - System Design, Simply Explained

ในช่วงแรก Product เราสามารถออกแบบระบบให้อยู่ใน Server และ Database เดียวกันได้ แต่เมื่อระบบโตขึ้น มีผู้ใช้งานเพิ่มขึ้น ข้อมูลเยอะขึ้น ระบบเริ่มทำงานช้าลดเรื่อยๆ สิ่งที่หนีไม่ได้คือการ Decomposition Service ไปเป็น Distributed System เช่น Member Service, Booking Service, Payment

By Boonsong Srithong
Core Infrastructure Concepts - System Design, Simply Explained

Core Infrastructure Concepts - System Design, Simply Explained

บทความนี้จะอธิบายพื้นฐานของ Core Infrastructure Concepts ในมุมมองของ System Design โดยเล่าต่อจากตัวอย่าง Gym Application ในบทความ Data & Storage Concepts เพื่อให้เห็นว่า Request หนึ่งจาก Client ต้องผ่านอะไรบ้างก่อนจะไปถึง Backend, Database หรือ Storage จากบทความ Data & Storage Concepts ตอนนี้ Gym

By Boonsong Srithong