เคยเจอกันไหมครับ? โปรเจกต์ที่ Repo ปนกันมั่วไปหมด, Permission ก็ยุ่งเหยิงหาเจ้าของไม่เจอ, จะหาโค้ดทีเหมือนงมเข็มในมหาสมุทร... นี่คือภาพสะท้อนของความโกลาหลที่คอยฉุดรั้งทีมของเราให้เดินไปข้างหน้าได้ช้าลง มันไม่ใช่แค่เรื่องรกไม่เป็นระเบียบ แต่มันคือตัวการสำคัญที่ทำให้การทำงานแบบ Agile ของเราสะดุด

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

เริ่มจากภาพใหญ่ ให้ GitLab สะท้อนโครงสร้างของทีม

ก่อนจะสร้าง Group หรือ Project อะไรขึ้นมา ลองถอยมาดูก่อนว่าบริษัทหรือทีมของเรามีโครงสร้างการทำงานกันแบบไหน แบ่งตาม Product, Business Unit, หรือตาม Squad? ไอเดียก็คือ ทำให้โครงสร้างใน GitLab มันเป็นเหมือนกระจกสะท้อนการทำงานจริงของเรา

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

ส่วนประกอบหลัก Group, Subgroup, Project

GitLab มีเครื่องมือให้เรา 3 อย่างในการสร้างบ้านหลังนี้ ลองนึกภาพตามกันดู

  1. Top-Level Group (บ้านหลังใหญ่): เปรียบเสมือน "ชื่อบริษัท" ของเราใน GitLab Best practice คือ มีแค่ Group เดียวก็พอ สำหรับทั้งบริษัท เพื่อรวมทุกอย่างไว้ที่ศูนย์กลาง จัดการ User, Billing, Security Policy ต่างๆ ได้จากที่เดียวจบ
  2. Subgroups (ห้องของแต่ละแผนก): พอมีบ้านแล้ว ก็ถึงเวลาแบ่งห้องให้แต่ละทีม เช่น ทีม Engineering, ทีม Marketing หรืออาจจะซอยย่อยลงไปเป็นทีม Mobile, ทีม Web ก็ได้ตามโครงสร้างของเราเลย
  3. Projects (ที่เก็บของ): นี่คือบ้านของ Codebase แต่ละตัว ควรจะแยก 1 Project ต่อ 1 Codebase (เช่น 1 Microservice, 1 App) แล้วเอาไปวางไว้ใน Subgroup ของทีมที่เป็นเจ้าของ

จัดการสิทธิ์ (Permission) สไตล์ไหนดี?

ทีนี้มาถึงเรื่องสำคัญ ว่าจะจัดการสิทธิ์การเข้าถึงยังไงให้เวิร์คและเหมาะกับขนาดทีมของเรา มันมีอยู่ 2 สไตล์หลักๆ

สไตล์ที่ 1 จัดสิทธิ์เป็นกลุ่ม (เหมาะกับทีมใหญ่)

สไตล์นี้เหมาะกับองค์กรใหญ่ๆ ที่มีคนเยอะและโครงสร้างซับซ้อน วิธีการคือ:

  • สร้าง Group สำหรับจัดการโดยเฉพาะ: อาจจะเรียกว่า "Organizational Group" เอาไว้สร้าง "กลุ่มผู้ใช้" (User Group) ตามแผนกหรือตำแหน่ง เช่น dev-team, qa-team
  • แชร์สิทธิ์ทั้งกลุ่ม: เวลาจะให้สิทธิ์เข้าถึงโปรเจกต์ไหน ก็ไม่ต้องไล่เพิ่มทีละคน แต่ให้ใช้วิธี "Share with group" แล้วเลือกกลุ่มผู้ใช้ที่เราสร้างไว้ได้เลย สะดวกและลดความผิดพลาดได้เยอะมาก
จัดสิทธิ์เป็นกลุ่ม
จัดสิทธิ์เป็นกลุ่ม

สไตล์ที่ 2: ให้สิทธิ์โดยตรง (เหมาะกับทีมเล็ก)

สำหรับทีมที่ไม่ใหญ่มาก หรือมีโครงสร้างไม่ซับซ้อน สไตล์นี้อาจจะคล่องตัวกว่า

  • เพิ่มสิทธิ์รายคน: ใครต้องเข้าถึงโปรเจกต์ไหน ก็เพิ่มสิทธิ์ให้คนนั้นโดยตรงเลย อาจจะดูเหมือนจัดการเยอะกว่า แต่ก็ให้ความยืดหยุ่นและควบคุมได้ง่ายในสเกลที่ไม่ใหญ่มาก
  • เรียบง่าย ไม่ซับซ้อน: ไม่ต้องมีโครงสร้าง Group ซ้อน Group ให้วุ่นวาย เหมาะกับทีมที่ต้องการความเร็วและความคล่องตัวสูง
ให้สิทธิ์โดยตรง
ให้สิทธิ์โดยตรง

บทสรุป

การวางโครงสร้างใน GitLab ให้ดีตั้งแต่แรก คือหัวใจสำคัญของการสร้างทีมที่ทำงานแบบ Agile ได้อย่างเต็มประสิทธิภาพ มันช่วยลดความสับสน ทำให้ทุกคนมองเห็นภาพเดียวกัน และที่สำคัญคือมันช่วยให้ทีมของเราโฟกัสไปที่การสร้าง Product ดีๆ แทนที่จะต้องมาเสียเวลากับความวุ่นวายภายใน

ไม่ว่าเราจะเลือกใช้สไตล์ไหนในการจัดการสิทธิ์ สิ่งสำคัญคือการเลือกวิธีที่เหมาะกับขนาดและวัฒนธรรมของทีมเรา การลงทุนลงแรงจัดบ้านใน GitLab วันนี้ จะช่วยประหยัดเวลาและลดปัญหาปวดหัวในระยะยาวได้อย่างแน่นอนครับ

Thanks: https://about.gitlab.com/blog/best-practices-to-set-up-organizational-hierarchies-that-scale