Developer analytics

AtoAxis เปลี่ยน editor heartbeat เป็นเวลารวม ค่าเฉลี่ยต่อวัน และ breakdown ตาม project, language, editor, operating system และ branch ทุกมุมมองกรองและ drill down ต่อได้ พร้อม 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 ยอดรวมกับกราฟจึงตรงกันเสมอ

สำรวจและ drill down

ตัวเลขข้างบนไม่ใช่รายงานตายตัว filter bar ชุดเดียวขับทุกมุมมอง เลือกเจาะเฉพาะโปรเจกต์ ภาษา branch หรือ editor แล้ว timeline, breakdown และสัดส่วน AI เทียบ human จะคำนวณใหม่บนช่วงเดียวกัน สถานะ filter อยู่ใน URL การเจาะแบบหนึ่ง ๆ จึงเป็นลิงก์ที่ bookmark หรือส่งต่อได้

  • Activity timeline: งานเกิดขึ้นตอนไหนตลอดช่วง แสดงเป็น block ไม่ใช่แท่งรายวันแท่งเดียว
  • Human vs AI: สัดส่วนรายวันระหว่างงานที่ AI ทำกับที่พิมพ์เอง ภายใต้ filter ใดก็ได้
  • Projects: ทุกโปรเจกต์เรียงตาม filter ปัจจุบัน กดขยายดูไฟล์ในแต่ละโปรเจกต์ได้
  • Activity heatmap: รูปแบบตามวันในสัปดาห์และชั่วโมงในวัน เบื้องหลังคำถาม "จริง ๆ แล้วเขียนโค้ดตอนไหน"
  • ทั้งสี่มุมมองใช้ duration model เดียวกัน สลับมุมมองแล้วยอดรวมไม่เปลี่ยน

ตัวเลขถูกสร้างขึ้นอย่างไร

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 ที่ใช้สร้าง ทำให้รู้ได้ว่ากำลังอ่านข้อมูลเก่าอยู่หรือไม่
  • เปิดดู stream ของ heartbeat ดิบได้โดยตรง ทุกตัวเลขจึงย้อนกลับไปหาเหตุการณ์ที่อยู่เบื้องหลังได้

Goals และ leaderboards

มีสองชั้นเสริมแบบเลือกใช้อยู่บน analytics ทั้งคู่ต้องให้ server รัน PostgreSQL และไม่มีชั้นไหนเปลี่ยนวิธีวัด coding time

  • Goals: ตั้งเป้าเวลาเขียนโค้ดรายวัน รายสัปดาห์ หรือรายเดือน จะเจาะเฉพาะโปรเจกต์หรือภาษาเดียวก็ได้ วัดเทียบกับ canonical timeline ชุดเดียวกัน และเป้าจะเป็นขอบบน (ไม่เกิน) ก็ได้เหมือนขอบล่าง
  • Leaderboards: บอร์ดแบบ opt-in สำหรับเวลาเขียนโค้ดรวม เวลาที่พิมพ์เอง เวลาที่ AI ทำ หรือค่าใช้จ่าย AI โดยประมาณ รายสัปดาห์หรือรายเดือน บอร์ดจัดอันดับเฉพาะคนที่เข้าร่วม ไม่มีการเทียบอัตโนมัติ

สิ่งที่ระบบไม่ได้วัด

หน้า analytics ไม่สร้าง productivity score และไม่ประเมินคุณภาพ และไม่มีอะไรในนั้นจัดอันดับคุณโดยอัตโนมัติ มีส่วนเสริมแบบ opt-in สองอย่างอยู่ข้าง ๆ คือ leaderboard ที่เทียบเฉพาะคนที่เข้าร่วมบอร์ดเดียวกัน และการแสดง streak กับ level บนหน้า overview ส่วนงานที่อยู่นอก editor ที่เชื่อมต่อหรือนอก AI transcript agent จะไม่ถูกอนุมาน

  • ไม่มีตัวเลข analytics ตัวเดียวที่ถูกนำเสนอเป็นคำตัดสินของทั้งวัน
  • ไม่มีการเปรียบเทียบระหว่างบัญชีโดยอัตโนมัติ leaderboard จัดอันดับเฉพาะสมาชิกที่ opt-in และต้องมี PostgreSQL บน server
  • widget streak, level และ quest บนหน้า overview เป็นของประดับ ไม่ป้อนกลับไปที่ metric ใด
  • ไม่ตัดสินคุณภาพของโค้ด จำนวนบรรทัดคือปริมาณ ไม่ใช่สัญญาณคุณภาพ
  • ไม่เดาจากความเร็วการพิมพ์หรือรูปแบบโค้ดเพื่อเติมช่องว่างของ 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 และวัน