หากบริษัทไหนเริ่มนำ Agile เข้ามาใช้ในองค์กร และต้องกำลังตามหาเครื่องมือที่จะสามารถทำงานในแบบ Agile ได้อย่างดี ผมแนะนำเป็น Gitlab
Agile เป็นหนึ่งในวิธีการที่สำคัญที่สุดในการนำมาใช้กับบริษัทที่ต้องการพัฒนาซอฟต์แวร์ในทศวรรษที่ผ่านมา ซึ่งหากใครยังไม่รู้จัก Agile ผมแนะนำให้อ่าน สรุปการอบรม Agile 1 วันเพื่อนำมาใช้ในองค์กร เพื่อปรับพื้นฐานและทำความเข้าใจเบื้องต้นกันก่อน 🙂
GitLab เป็น Git repository ที่ได้รับการออกแบบให้มีความยืดหยุ่นเพียงพอที่จะปรับให้เข้ากับวิธีการทำงานแบบ Agile และก็มี 9 เหตุผลที่ทำให้ผมเลือกใช้ Gitlab เป็น Git repository และในโพสต์นี้ผมจะแสดงการจับคู่อย่างง่ายๆ ของคุณสมบัติ Agile กับ GitLab และอธิบายว่าบริษัทผมนำ Gitlab มาใช้งานกับ Agile ได้ยังไง
Agile artifact | GitLab feature |
---|---|
User story | Issues |
Task | Task lists |
Epics | Epics |
Points and estimation | Weights |
Product backlog | Issue lists and prioritized labels |
Sprint/iteration | Milestones |
Burndown chart | Burndown charts |
Agile board | Issue boards |
คราวนี้เรามาดูกันทีละตัวว่ามันมีการใช้งานทดแทนกันแบบไหน
ใน Agile เรามักจะเขียน User story card เพื่อเก็บข้อมูล Features ต่างๆ ก่อน ซึ่งใน Gitlab เราสามารถเขียนในรูปแบบของ Issue ได้ แล้วเราก็ติด Label ว่า user story
บ่อยครั้งที่ User story จะถูกแยกออกเป็นแต่ละ Tasks เพิ่มเติม เราสามารถเขียน Task list ในรูปแบบ Markdown ออกมาได้ในคำอธิบายของ User story นั้นๆ
ในส่วนของ Epic นั้น Gitlab ก็มีรองรับเช่นกันเพื่อสร้างช่วยในเรื่องของการจัดกลุ่ม issue ต่างๆ ได้อีก แต่ในส่วนของ Gitlab epic เราต้องเสียเงินเพิ่มเติมถึงจะใช้งานได้
โดยปกติแล้วเจ้าของผลิตภัณฑ์จะสร้าง User story card ออกมาเพื่อสะท้อนความต้องการของธุรกิจ และจะจัดลำดับความสำคัญในงานต่างๆ เพื่อบ่งบอกความเร่งด่วน และลำดับการพัฒนาที่ต้องการ
ใน GitLab จะมี Issue lists ที่เราสามารถดูเพื่อติดตามงานต่างๆ ได้ โดยสามารถกำหนด Label ให้แต่ละ Issue ได้ซึ่งช่วยให้สามารถกรองตาม Label ต่างๆ ทำให้มีความยืดหยุ่นมากขึ้น
Sprint เป็นการกำหนดช่วงเวลาในการทำงานให้เสร็จ ซึ่งอาจเป็นหนึ่งสัปดาห์ หรือสองสามสัปดาห์ หรืออาจเป็นเดือนหรือมากกว่านั้น แต่ส่วนใหญ่จะกำหนดเป็นสองสัปดาห์ซึ่งบริษัทผมก็เป็นแบบนี้
ใน Gitlab จะมี Milestones ที่เราสามารถกำหนดออกมาในรูปแบบ Sprint ได้ สามารถใส่วันที่เริ่มต้น และวันที่จบได้ และนำ Issue มาใส่ในนี้ได้เพื่อให้ทราบว่า Sprint นี้จะได้อะไรออกมา
การทำ Sprint planning เป็นการวางแผนในแต่ละ sprint และจะมีการกำหนดคะแนนให้กับ issue ต่างๆ ในแบบเลขฟิโบนาชชี่ (Fibonacci numbers) คือ 0,1,2,3,5,8,13,20,40 และ 100
ซึ่ง issue ต่างๆ ของ Gitlab เราสามารถกำหนด Weight ลงไปได้เลย ทำให้เราสามารถรู้ได้ว่า issue ไหนยาก หรือง่าย
Agile board ส่วนใหญ่จะทำเป็นในลักษณะ Kanban board คือบอร์ดที่มีการแบ่งออกมาเป็นหลายๆ ส่วน เช่น To do, In progress และ Testing (ขึ้นอยู่กับ work flow ในแต่ละองค์กร) เพื่อเป็นการกำหนดว่า Issue ไหนใครทำ และอยู่ส่วนไหนแล้ว โดยส่วนนี้จะแสดงให้ทุกคนในทีมเห็นได้โดยง่าย เพื่อรับรู้สถานะที่เกิดขึ้นใน Project นั้นๆ แบบ Real time
ซึ่งใน Gitlab จะมี Issue board ให้อยู่แล้วเราสามารถปรับแต่ง work flow ได้ตามต้องการอย่างอิสระ
ในส่วนของทีมพัฒนาต้องทราบว่าทำงานเสร็จไปแล้วเท่าไร และเหลืองานที่ต้องทำอีกเท่าไรซึ่งจะถูกแสดงออกมาในลักษณะของกราฟทำให้มองภาพรวมได้ง่ายขึ้นผ่านรูปแบบ Burndown chart
ซึ่ง GitLab ก็มี Burndown chart มาให้พร้อมแล้ว มันอยู่ใน Milestones แต่เราต้องกำหนด Weight ให้กับ Issue ด้วยเราถึงจะเห็น Burndown chart
การทำ Agile นั้นเราต้องส่งชิ้นงานให้ลูกค้าได้เห็นบ่อยขึ้น ได้ทดสอบบ่อยขึ้น ทำให้จำเป็นต้องทำ CI/CD ให้กับระบบเพื่อจะได้ไม่ต้องเสียเวลาทำสิ่งที่ต้องทำซ้ำๆ ในทุกๆ การ Release เช่น ต้องทดสอบทุกครั้ง, ต้อง build ทุกครั้ง, ต้องเอาขึ้น server นี้ทุกครั้ง เป็นต้น
โดยส่วนใหญ่จะทำงานเป็นในลักษณะ Pipeline ทำงานต่อกันไปเรื่อยๆ
ซึ่ง Gitlab ได้มี CI/CD มาให้พร้อมใช้งานเลย โดยมี Gitlab-runner เป็นตัวช่วยทำงาน Run jobs ต่างๆ ให้ทำงานตาม Pipeline ที่เรากำหนด และวิธีการเขียนก็อยู่ในรูปแบบ yaml
ทำให้เราสามารถเก็บค่าพวกนี้ลงใน Git ได้ตามปกติ
มีการแสดงผลลัพธ์ของ Job นั้นๆ ว่าผ่านหรือไม่ผ่านทันที และก็จะมี Log แสดงผลให้ดูด้วยว่าทำงานอะไรไปบ้าง ทำให้เราตรวจได้ว่าคำสั่งที่ใส่ไปใช้งานได้จริงไหม
เนื่องจากทีมผมใช้ Gitlab กันอยู่แล้ว มันเป็นเครื่องมือที่ครบเครื่องมากทำให้พอเรานำ Agile เข้ามาใช้งาน การทำงานก็เลยไม่ได้สดุดอะไรมาก เพียงแค่ปรับวิธีการให้เป็น Agile มากขึ้นเท่านั้น
ตัวผมเองได้รับประโยชน์อันนี้จากการทำงานกันจริง ผมเลยอยากแชร์ หรือช่วย Gitlab ขายของหน่อย ฮาๆ ว่าของเขาเป็นดีจริงๆ และหวังว่าคนที่หลงเข้ามาอ่านจะสามารถเข้าใจในระบบ Gitlab มากขึ้น
ซึ่งต้องยอมรับ Gitlab ได้พัฒนามาไกลมากๆ จากเป็นเพียงแค่ Git repository มาตอนนี้ได้มาเป็นสิ่งที่เรียก DevOps platform ไปแล้ว… โหดสัส
GitLab is a complete DevOps platform, delivered as a single application.