วิธีหา Insights การทำงานของ Dev ผ่าน Git

Chaowlert Chaisrichalermpol
KBTG Life
Published in
4 min readAug 7, 2023
Photo by Antonio Janeski on Unsplash

สมมติคุณเป็น Project Manager ที่เพิ่งเข้ามาจอย Dev ทีมๆ หนึ่ง ซึ่งโปรเจคมีขนาดใหญ่และซับซ้อนมาก และ Dev ที่เข้ามาจอยโปรเจคนี้ก็มีจำนวนมาก

เอาล่ะ Challenge คือ…

เรื่องมีอยู่ว่า ผมมีโอกาสได้เป็น Project Owner ของโปรเจคนึง ซึ่งโปรเจคมี Dev ถึง 5 ทีม และมี Services จำนวน 40 Services และเราก็มีประเด็นเรื่อง Load ของงานกัน โชคดีที่ผมมีสกิล Technical อยู่บ้าง เลยสามารถถึงข้อมูลจาก Git มาเป็น Insight Data เพื่อประกอบการตัดสินใจในการจัดการทีม

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

  1. คุณจะรู้ได้อย่างไรว่า Dev คนไหนสำคัญกับทีมคุณมากที่สุด และมีการกระจายงานอย่างเหมาะสมหรือไม่?
  2. แต่ละ Component ใครที่คุณน่าจะไปขอข้อมูลได้?
  3. คนๆ นึงดูกี่ Component และเค้าทำ Component ไหนเยอะที่สุด?
  4. Culture การทำงานเป็นอย่างไร? ทีมนี้มักจะทำงานในเวลางานหรือทำ OT
  5. หา Trend ในการทำงาน

เพราะ Dev ทุกคนต้องทำงานผ่าน Git อยู่แล้ว ดังนั้น Git ก็จะมีข้อมูลการทำงานของ Dev โดยละเอียด

Warning: ต่อไปจะมี Bash Script อยู่บ้างนะครับ ใครไม่ถนัด Technical เลย ให้ Dev ช่วยดึงข้อมูลมาก็ได้ครับ แล้วเราก็เอา Data ไปทำใน Excel ต่อใน Section ล่าง

ลองมาดูตัวอย่างกัน

สมมติคุณเพิ่งมาจอยทีมของ nestjs

ก่อนอื่นคุณก็ต้อง Clone โปรเจคต่างๆ ของ nestjs ลงมาในเครื่องของคุณก่อน

git clone https://github.com/nestjs/nest.git
git clone https://github.com/nestjs/awesome-nestjs.git
git clone https://github.com/nestjs/nest-cli.git
git clone https://github.com/nestjs/typeorm.git
git clone https://github.com/nestjs/typescript-starter.git
git clone https://github.com/nestjs/swagger.git
git clone https://github.com/nestjs/graphql.git
git clone https://github.com/nestjs/docs.nestjs.com.git
git clone https://github.com/nestjs/cqrs.git
git clone https://github.com/nestjs/terminus.git
git clone https://github.com/nestjs/bull.git
git clone https://github.com/nestjs/jwt.git
git clone https://github.com/nestjs/throttler.git
git clone https://github.com/nestjs/passport.git
git clone https://github.com/nestjs/ng-universal.git
git clone https://github.com/nestjs/mongoose.git
git clone https://github.com/nestjs/config.git
git clone https://github.com/nestjs/serve-static.git
git clone https://github.com/nestjs/elasticsearch.git
git clone https://github.com/nestjs/schematics.git

หลังจาก Clone แล้ว ก็มา Run Bash ที่มีคำสั่งตามนี้ครับ

#!/bin/bash

# Print header
echo -n "project,commit,author,email,date,file,insert,delete" > report.csv

# Loop each folder
for d in */
do
cd $d

# Fetch and print log
git fetch
git log --no-merges --all --pretty="^$d,%h,\"%an\",%ae,%ai," --shortstat | tr "\n" " " | tr "^" "\n" >> ../report.csv
cd ..
done

# Clean data
ssed -i -R "s/\s+(\d+) files? changed(?:, (\d+) insertions?\(\+\))?(?:, (\d+) deletions?\(\-\))?/\1,\2,\3/" ./report.csv

Note: Command ด้านบนใช้คำสั่ง ssed ถ้าคุณยังไม่มี ssed คุณต้องไป Install ssed ก่อนนะครับ เช่น

# for ubuntu
sudo apt-get update
sudo apt-get install ssed

หรือ

# for Mac
brew install ssed

หลังจากที่ Run คำสั่งแล้ว คุณก็จะได้ไฟล์ report.csv ซึ่งคุณสามารถนำมาเปิดกับ Excel ได้เลยครับ เมื่อเปิดแล้ว ก็กดคำสั่ง PivotTable ตามรูปครับ

1. หาว่า Dev คนไหนสำคัญกับทีมของคุณมากที่สุด และทีมของคุณมีการกระจายงานที่ดีหรือไม่?

วิธีการหาผลงานของ Dev แต่ละคน ให้คุณสร้าง Pivot Table ตามนี้ครับ

  • ลาก Author ไปที่ Rows
  • ลาก Commit, File และ Insert ไปที่ Values

จากรูป คุณจะรู้เลยว่า Kamil เป็น Dev ที่สำคัญมากๆ ในโปรเจคของคุณ ในขณะที่ Dev ส่วนใหญ่มี Contribution น้อยมาก ไม่ได้มีการกระจายงานที่ดี

2. แต่ละ Component มี Contribution กันอย่างไรบ้าง?

ให้เซ็ต Pivot Table ตามนี้ครับ

  • ลาก Project และ Author ไปที่ Rows
  • ลาก Commit, File และ Insert ไปที่ Values

จากรูปจะเห็นว่า nest และ docs คนที่ทำจะเป็น Kamil ซะส่วนใหญ่ ในขณะที่ cli และ schematics คนที่ดู component จะเป็น thomrick

3. แล้ว Dev แต่ละคนมี Contribution กับ Component ไหนมากที่สุด?

ให้เซ็ต Pivot Table ตามนี้ครับ

  • ลาก Author และ Project ไปที่ Rows
  • ลาก Commit, File และ Insert ไปที่ Values

จากรูปก็จะเห็นว่า Kamil เน้นไปที่ nest และ docs, thomrick ก็ทำ cli และ schematics ส่วน Livio ทำ terminus

4. Culture การทำงานของทีมนี้เป็นอย่างไรบ้าง?

ก่อนอื่นคุณจะต้องเพิ่มอีก 4 Columns

  1. date2: Formula คือ =LEFT([@date], 19) เพื่อปรับ Date Format ให้ Excel รู้จัก
  2. dow: Formula คือ =TEXT([@date2], “ddd”) เพื่อดูวันทำงาน
  3. time: Formula คือ =TEXT([@date2], “HH”) เพื่อดูเวลาที่ทำงาน
  4. slot: Formula คือ =IF(OR([@dow]= “Sat”, [@dow]= “Sun”), “Weekend”,IF(AND([@time]>= “08”, [@time]< “18”), “Working Time”, “OT”)) เพื่อแบ่งประเภทการทำงาน

จากนั้นก็ไปรีเฟรช Pivot Table เพื่ออัพเดตค่าใหม่ แล้วเซ็ต Pivot Table ตามนี้ครับ

  • ลาก Author ไปที่ Rows
  • ลาก Slot ไปที่ Columns
  • ลาก Commit ไปที่ Values

ก็จะเห็นว่า Culture การทำงานของที่นี่ แม้ Working Time จะมีงานซะส่วนใหญ่ แต่ก็มีการทำงาน OT และทำงานวันหยุดค่อนข้างเยอะ ถือว่าเป็นทีมที่ทุ่มเทกันพอสมควร

5. หา Trend ในการทำงาน

เราต้องเพิ่มอีก Column นึง คือ Year โดยมี Formula คือ =Text([@date2], “yyyy”)

รีเฟรช Pivot Table แล้วเซ็ตค่าตามนี้

  • Author ไปที่ Rows
  • Year ไปที่ Columns
  • Commit ไปที่ Values

จากรูปจะเห็นว่า Kamil กับ thomrick เริ่มมาด้วยกัน แต่ thomrick ดรอปไปแล้ว และเริ่มมีคนใหม่มาช่วยในปีหลังๆ

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

สำหรับใครที่ชื่นชอบบทความนี้ อย่าลืมกดติดตาม Medium: KBTG Life เรามีสาระความรู้และเรื่องราวดีๆ จากชาว KBTG พร้อมเสิร์ฟให้ที่นี่ที่แรก

--

--