Developer analytics
AtoAxis เปลี่ยน editor heartbeat เป็นเวลารวม ค่าเฉลี่ยต่อวัน และ breakdown ตาม project, language, editor, operating system และ branch พร้อม keystrokes, characters และ AI-attributed lines
Metrics ที่มีให้ดู
เวลา
- วันนี้ 7 วัน 30 วัน หรือช่วงวันที่กำหนดเอง
- ค่าเฉลี่ยต่อวัน active days และวันที่สูงสุด
- เวลาปัจจุบันและ duration blocks
Breakdown
- Project, programming language, editor, operating system และ branch
ปริมาณ activity
- Keystrokes, characters เพิ่ม/ลบ, active days และ heartbeat count
AI attribution
- AI lines ต่อ agent, สัดส่วน AI heartbeat และ daily AI เทียบ human
ช่วงเวลาและนิยามของ "หนึ่งวัน"
ทุก metric ต้องระบุช่วงเวลาเสมอ มีช่วงสำเร็จรูปสี่แบบและกำหนดวันเริ่ม-สิ้นสุดเองได้ และ "หนึ่งวัน" คือวันตามปฏิทินใน timezone ที่ client ส่งมา ถ้าไม่ส่งจะใช้ UTC งานที่ทำข้ามเที่ยงคืนจึงไปอยู่ในวันที่คุณคาดหวัง
- today, last_7_days, last_30_days และ all_time
- กำหนดวันเริ่มและวันสิ้นสุดเองสำหรับกรณีอื่น
- all_time นับจาก heartbeat แรกของคุณ ไม่ได้ถูกตัดด้วย retention window
- ช่วงเวลาเดียวกันใช้กับทั้ง breakdown และ daily series ยอดรวมกับกราฟจึงตรงกันเสมอ
ตัวเลขถูกสร้างขึ้นอย่างไร
Heartbeat ถูกรวมเป็น daily aggregate ใน ClickHouse heartbeat ที่เกิดใกล้กันเป็น duration block ช่วงว่างที่นานพอจะปิด block และไม่นับ idle gap
ทำไมยอดรวมจึงน้อยกว่าเวลาที่นั่งอยู่จริง
heartbeat เกิดจากการแก้ไข การ save และการสลับไฟล์ เวลาที่ใช้อ่านโค้ด ประชุม หรือลุกออกจากโต๊ะจะไม่สร้าง heartbeat ช่วงว่างนั้นจึงปิด block แทนที่จะต่อเวลาให้ ตัวเลขที่ได้คือเวลาที่ลงมือเปลี่ยนโค้ดจริง ซึ่งเป็นสิ่งเดียวที่ editor สังเกตได้อย่างซื่อตรง
Analytics ระดับโปรเจกต์
ทุก metric ข้างต้นดูแยกรายโปรเจกต์ได้ด้วย ซึ่งมักเป็นคำถามที่ต้องการคำตอบจริง ๆ ไม่ใช่ว่าเขียนโค้ดไปกี่ชั่วโมง แต่โปรเจกต์นั้นใช้เวลาไปเท่าไร
- กราฟรายวันของโปรเจกต์เดียวตลอดช่วงที่เลือก
- ไฟล์ที่แตะในโปรเจกต์นั้นพร้อมยอดของแต่ละไฟล์
- สัดส่วน AI เทียบ human เฉพาะโปรเจกต์นั้น
- project rule แบบ regex และการ merge เอง เพื่อไม่ให้ checkout สองที่ของ repository เดียวถูกนับเป็นสองโปรเจกต์
Attribution และความครอบคลุมของข้อมูล
การเปลี่ยนแปลงบรรทัดถูกจัดเป็นสามกลุ่ม และรายงาน coverage เป็นเปอร์เซ็นต์แทนที่จะซ่อนไว้ metric ที่ยืนยันไม่ได้จะเป็น null พร้อมเหตุผล ไม่ถูกแสดงเป็นเลขศูนย์ที่ดูเหมือนมั่นใจ
- AI: บรรทัดที่ hook หรือ client ระบุชัดว่ามาจาก agent ชื่อใด
- Human: keystroke และ character ที่ editor เห็นว่าคุณพิมพ์เอง
- Unattributed: การเปลี่ยนแปลงที่ไม่มีหลักฐานทั้งสองฝั่ง เก็บแยกไว้แทนที่จะเดา
ตัวเลขที่คำนวณย้อนกลับได้
ค่า aggregate เป็นเพียง projection ของ heartbeat ดิบ ไม่ใช่ตัวบันทึกหลัก จึงสร้างใหม่ได้ และ projection ที่สร้างใหม่จะถูกเผยแพร่ก็ต่อเมื่อกระทบยอดตรงแล้ว โดยทุก response แนบเวอร์ชันของข้อมูลที่ใช้สร้างมาด้วย
- ประมวลผลข้อมูลของวันหนึ่งใหม่จาก history ดิบได้โดยไม่ต้องลบอะไร
- ถ้ากระทบยอดไม่ผ่าน ระบบจะคงเวอร์ชันเดิมที่อ่านได้ไว้ แทนที่จะเผยแพร่ตัวที่ผิด
- response บอก data version ที่ใช้สร้าง ทำให้รู้ได้ว่ากำลังอ่านข้อมูลเก่าอยู่หรือไม่
สิ่งที่ระบบไม่ได้วัด
ไม่มี productivity score, ranking หรือการประเมินคุณภาพ ไม่มี team rollup และไม่อนุมาน activity นอก editor
- ไม่มีตัวเลขเดียวที่อ้างว่าแทนความ productive ของทั้งวัน
- ไม่มีการเปรียบเทียบกับนักพัฒนาคนอื่นหรือบัญชีอื่น
- ไม่ตัดสินคุณภาพของโค้ด จำนวนบรรทัดคือปริมาณ ไม่ใช่สัญญาณคุณภาพ
- ไม่เดาจากความเร็วการพิมพ์หรือรูปแบบโค้ดเพื่อเติมช่องว่างของ attribution
หน้าที่เกี่ยวข้อง
คำถามที่พบบ่อยเรื่อง Developer analytics
- วัด coding activity อย่างไร?
- บันทึก activity จาก editor แล้วรวมเป็น session แทนการเดาจากจำนวน commit
- คำนวณ coding time อย่างไร?
- heartbeat ใกล้กันเป็น duration block และไม่นับ idle gap
- เลือกช่วงเวลาอะไรได้บ้าง?
- Today, 7 วัน, 30 วัน, all time หรือกำหนด start/end
- ดูภาษาได้หรือไม่?
- ได้ heartbeat มี detected language และ aggregate totals
- นับ keystrokes หรือไม่?
- นับ keystrokes และ characters แยกตาม project และวัน