Monthly Archives: October 2012

เข้าใกล้ Continuous Deployment ไปอีกหนึ่งก้าว

ช่วงนี้มีความสุขมากกับโปรเซสการ deploy code ขึ้น production ของบริษัทที่เริ่มเข้ารูปเข้ารอยเสียที หลังจากถกเถียงกันมาหลายเดือน ตอนนี้สามารถ deploy ได้ทุกวันแล้ว สาเหตุที่ชอบ ให้ deploy บ่อยๆ คือ

  1. ได้รับ feedback ของ feature ที่พัฒนาไปอย่างรวดเร็ว ไม่นานจนต้อง switch ไปทำอย่างอื่นจนลืม และทำให้ไม่ต้องทำงานพร้อมๆ กันหลายๆ เรื่อง
  2. ถ้ามีปัญหาอะไรหลังจาก deploy ก็สามารถหาสาเหตุได้ง่าย เพราะจำนวน change ในแต่ละรอบน้อย
  3. เวลาจะ hotfix อะไร ไม่ต้องกังวลเรื่องความต่างของ version มาก
  4. ตอบฝ่าย business และ support ได้ง่ายขึ้นว่า fix หรือ feature อะไรจะ live เมื่อไหร่

โปรเซสก็ไม่มีอะไรมาก ได้แรงบันดาลใจส่วนใหญ่มาจาก Github flow ตามนี้

  1. Dev เริ่ม implement feature ใช้เวลาเฉลี่ยต่อ story ประมาณครึ่งวัน
  2. พอทำเสร็จก็ merge master ล่าสุดเข้าที่ branch นี้
  3. จากนั้นก็ deploy ไปที่ sandbox server ให้ PM มาดูว่าตรงตามความต้องการหรือยัง ถ้ายังก็กลับไปแก้ใหม่เรื่อยๆ จนผ่าน
  4. เปิด pull-request branch ให้คนมา review ตรงนี้จะแก้เฉพาะ code style ไม่แก้ตัว behavior ของ feature แล้ว
  5. ในขณะเดียวกัน CI ก็จะดึง branch นั้นไป run test ทั้งหมด ถ้า fail ก็ fix กันไป ตรงนี้ใช้ service ของ CircleCI
  6. พอ test ผ่าน และมีคน review 2-3 คนแล้วก็จะ merge เข้า master
  7. ถ้าทุกคนทำตามขั้นตอนที่ผ่านมาทั้งหมด ก็จะทำให้ master อยู่ในสถานะพร้อม deploy เสมอ
  8. ก่อนเวลาหนึ่งชั่วโมง deploy ขึ้น staging server ให้ QA ทำ smoke test
  9. ถึงเวลาก็ deploy ขึ้น production
  10. ตรวจสอบ error log กับ performance stats

ฟีเจอร์ไหนที่ทาง business ต้องการให้มีการประกาศก่อนที่จะ release ก็จะใช้วิธีการซ่อนเอาไว้ด้วย feature toggle ซึ่งตรงนี้ใช้ rollout ช่วย ก็คือทุกอย่างจะถูก deploy ขึ้นไปบน production server หมด เมื่อถึงเวลาที่ต้องการจึงค่อย activate เจ้าตัว rollout นี้ยังช่วยในเรื่องการ activate ให้เฉพาะ staff หรือ beta user ได้ทดลองใช้ feature ก่อนจะเปิดให้ทุก user ใช้ได้อีกด้วย

การ deploy บ่อยๆ จะเป็นไปไม่ได้เลยถ้ามี down time ระหว่าง deploy นาน ระบบที่บริษัทตอนนี้ใช้ preboot ที่ทาง Heroku มีให้ ก็เลยสะดวกหน่อย แต่ก็ยังมีปัญหาอยู่หากต้องมีการ migrate database schema

อีกสิ่งหนึ่งที่ยังทำให้หงุดหงิดใจอยู่คือ test suite นี่มัน run ทั้งหมดนานไปหน่อย บน CircleCI ใช้เวลาประมาณ 30 – 40 นาที ถ้ารัน parallel บน SSD ที่บริษัทใช้ประมาณ 15 นาที ถ้า test เร็วขึ้นกว่านี้ได้จะดีมากๆๆๆ

องค์กรเปิด

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

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

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

การลิมิตการเข้าถึงทรัพยากรขององค์กร การที่กลุ่มคนบางกลุ่มมีสิทธิ์ในการเข้าถึงทรัพยากรบางอย่างเพียงกลุ่มเดียว

=> องค์กรควรใช้ประโยชน์ให้คุ้มค่ามาที่สุดกับทรัพยากรที่ได้จ่ายเงินลงไป การเปิดให้ทุกคนได้เข้าถึงทรัพยากร อาจจะทำให้เกิดความคิดสร้างสรรค์ที่คิดไม่ถึงก็เป็นได้

การจ้างงาน ทุกอย่างถูกปิดเป็นความลับ จนถึงวันเริ่มงานวันแรกของคนใหม่

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

สถานการณ์เงิน องค์กรมีวิกฤตการเงิน กำลังจะไม่สามารถจ่ายค่าจ้างได้ ถูกยื้อไว้จนนานีสุดท้าย หลังจากที่จ่ายเงินเดือนล่าช้าแล้ว

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

คุยในที่ลับ

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

การปิดบังเงินเดือน

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

การปิดการออกผลิตภัณฑ์ใหม่ และการอัพเดตใหม่ จนถึงวันที่กำหนด

=> ถ้าองค์กรไม่ได้มีผลิตภัณฑ์ที่เป็นที่ตั้งตารอคอยจริงๆ ไม่มีใครสนใจหรอกว่าจะเปิดตัวเมื่อไหร่ การปิด โดยเฉพาะอย่างยิ่งกับด้านพัฒนาซอฟต์แวร์ ส่งผลเสียหลายด้าน เช่น การไม่มีโอกาสได้ทดสอบบนสถานการณ์จริง การที่ต้องปกปิดการเปลี่ยนแปลงบางอย่างจนกว่าจะถึงวันที่กำหนด มันไม่ได้มีผลดีอะไร การพัฒนาไปเปลี่ยนแปลงไป ทำให้ต้องคิดน้อยลง การบอกผู้ใช้งานว่าเรากำลังพัฒนาอยู่ ผมเชื่อว่าผู้ใช้งานเข้าใจ และชอบเห็นการพัฒนาของสิ่งที่ตัวเองใช้อยู่

การปิดข่าวพนักงานออก จนวันท้ายๆ

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

หลายๆ อย่างที่ผมกล่าวในนี้บางท่านอาจจะคิดว่ามันเป็นจริงไม่ได้หรอก ผมเองก็คิดเช่นนั้นเหมือนกัน(อ้าว) มันไม่มีทางเป็นจริงได้ทั้งหมด แต่ผมเชื่อว่าเราควรนำทางองค์กรไปในทางเปิดให้ได้ไกลที่สุด ส่วนเรื่องปิดเราจะทำกันโดยสัญชาติญานอยู่แล้ว 

ผมเชื่อว่าการสร้างวัฒนธรรมเปิดจะนำสิ่งดีๆมาให้แก่องค์กรครับ