วิธีการดูแลโค้ดของวิศวกร Facebook

by mk
21 January 2011 - 02:16

หมายเหตุ: ข่าวนี้เหมาะสำหรับคนที่สนใจเรื่องวิศวกรรมซอฟต์แวร์ และการจัดการโครงการซอฟต์แวร์ขนาดใหญ่ เพราะมีบทเรียนของ Facebook ให้เรียนรู้ แนะนำอย่างยิ่งให้อ่านต้นฉบับ (ซึ่งยาวมาก) ครับ

ทีมวิศวกรของ Facebook ใหญ่มาก คิดเป็นครึ่งหนึ่งของพนักงานทั้งบริษัท 2,000 คน โดยแบ่งเป็นทีมซอฟต์แวร์ และทีมดูแลระบบอย่างละครึ่ง (ประมาณทีมละ 400-500 คน) เพื่อให้เข้าใจง่าย ผมแบ่งเนื้อหาเป็น 2 ส่วนตาม 2 ทีมนี้นะครับ

ทีมวิศวกรซอฟต์แวร์

  • วิศวกรใหม่ของ Facebook จะต้องอบรมโครงสร้างและกระบวนการทำงานของบริษัท นานประมาณ 4-6 สัปดาห์ และมีคนไม่ผ่านอบรม ไม่รับเข้าทำงานประมาณ 10% อบรมเสร็จแล้วจะได้สิทธิ์เข้าถึง database ที่กำลังทำงานอยู่
  • วิศวกรทุกคนของ Facebook สามารถแก้โค้ดของซอฟต์แวร์ที่รัน Facebook ได้ตามใจชอบ ไม่จำกัดฝ่าย
  • Facebook มีผู้จัดการผลิตภัณฑ์ (product manager) น้อยมาก ฝ่ายบริหารและการตลาดไม่สำคัญเท่าวิศวกร
  • ผู้จัดการสั่งงานวิศวกรโดยตรงไม่ได้ ต้องใช้การล็อบบี้ คือเสนอไอเดียให้วิศวกร ซึ่งจะเลือกทำหรือไม่ทำก็ได้ ทำเป็นระยะเวลานานแค่ไหนก็ได้ ขึ้นกับวิศวกรแต่ละคน
  • วิศวกรจะทำทุกอย่างเองทั้งหมด ตั้งแต่โค้ดจาวาสคริปต์ไล่ลงไปถึงฐานข้อมูล รวมถึงการแก้บั๊กและดูแลโค้ดหลังใช้งานจริงแล้ว
  • Facebook ไม่มีทีม QA (เป็นหน้าที่ของวิศวกรเอง) และไม่ค่อยใช้ automated unit test (มีบ้างแต่ไม่เยอะนัก)
  • ในกรณีที่ต้องการดีไซเนอร์ วิศวกรก็ต้องไปขายไอเดียให้ดีไซเนอร์สนใจและยอมช่วยทำ แต่ส่วนมากวิศวกรของ Facebook นิยมทำงานระดับฐานราก มากกว่างานระดับอินเทอร์เฟซ
  • กระบวนการ commit โค้ดเข้าระบบ ต้องผ่านการรีวิวจากคนอื่นๆ อย่างน้อยหนึ่งคนเสมอ การส่งโค้ดโดยไม่รีวิวถือเป็นการประสงค์ร้าย และระบบถูกออกแบบมาให้คนอื่นๆ ช่วยกันรีวิวโค้ดได้ง่าย
  • โค้ดบางส่วนที่สำคัญมาก เช่น News Feed มีข่าวว่า Mark Zuckerberg จะเป็นคนรีวิวโค้ดด้วยตัวเองเสมอ
  • ตามธรรมเนียมแล้ว โค้ดของ Facebook รุ่นใหม่จะถูกนำขึ้นเซิร์ฟเวอร์จริงสัปดาห์ละครั้ง ทุกวันอังคาร
  • วิศวกรเจ้าของโค้ดที่จะส่งขึ้นเซิร์ฟเวอร์จริงในสัปดาห์นั้น จะต้องอยู่ที่บริษัทในวันอังคาร และต้องประจำอยู่ใน IRC ของบริษัทเพื่อเตรียมรับมือกับปัญหา

ทีมดูแลระบบเซิร์ฟเวอร์

  • ตอนนี้ Facebook มีเซิร์ฟเวอร์ประมาณ 60,000 ตัว
  • การเปลี่ยนแปลงโค้ดรุ่นใหม่จะแบ่งออกเป็น 3 ระดับกว้างๆ คือ p1 ทดสอบโค้ดใหม่เฉพาะภายใน p2 ปล่อยโค้ดใหม่ต่อสาธารณะในวงจำกัด และ p3 เปลี่ยนโค้ดหมดทั้งเว็บ
  • ชุดของเซิร์ฟเวอร์ที่เล็กที่สุดสำหรับทดลองโค้ดใหม่ ประกอบด้วยเซิร์ฟเวอร์ 6 ตัว
  • ทุกวันอังคาร ทีมระบบจะเริ่มทดสอบจาก 6 ตัวนี้ก่อน ถ้าผ่านก็จะไล่ระดับขึ้นไปเรื่อยๆ แต่ถ้าไม่ผ่าน วิศวกรจะต้องกลับไปแก้โค้ดใหม่ และเริ่มทดสอบจากชุดเล็กสุดเสมอ
  • ทีมดูแลระบบมีตัวชี้วัดหลายอย่าง ทั้งด้านเทคนิค และด้านพฤติกรรมของผู้ใช้ ถ้าหากโค้ดรุ่นใหม่ส่งผลให้พฤติกรรมของผู้ใช้เปลี่ยนไป ก็จะสามารถตรวจพบได้ทันที
  • เมื่อโค้ดผ่านการทดสอบทั้งหมดแล้ว จะถูกรวมเข้ากับโค้ดจริงที่จะปล่อยในวันอังคาร

ที่มา - FrameThink

Blognone Jobs Premium