مراقبة وموثوقية المنصة
مقاييس تجربة المطور
3 دقيقة للقراءة
مقاييس تجربة المطور (DevEx) تقيس مدى فعالية خدمة منصتك لمستخدميها—المطورين. تساعد هذه المقاييس فرق المنصة على فهم التبني والرضا ومجالات التحسين.
إطار DevEx
┌─────────────────────────────────────────────────────────┐
│ تجربة المطور (DevEx) │
├─────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ الحمل │ │ حالة │ │ حلقات │ │
│ │ المعرفي │ │ التدفق │ │ التغذية │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
│ "ما مدى تعقيد "هل يمكن للمطورين "كم سرعة حصول │
│ المنصة؟" البقاء في التدفق؟" المطورين على ردود؟"│
│ │
├─────────────────────────────────────────────────────────┤
│ │
│ أسئلة رئيسية: │
│ • هل يمكن لمطور جديد النشر في أسبوعه الأول؟ │
│ • كم مرة يحتاج المطورون طلب المساعدة؟ │
│ • ما النسبة التي تستخدم الخدمة الذاتية مقابل التذاكر؟│
│ • كم ينتظر المطورون للبنية التحتية؟ │
│ │
└─────────────────────────────────────────────────────────┘
مقاييس DevEx الأساسية
# مقاييس تجربة المطور
devex_metrics:
onboarding:
- name: "وقت أول التزام"
description: "الوقت من الانضمام إلى أول PR مدمج"
target: "<يومين"
measurement: |
first_merged_pr_date - employee_start_date
- name: "وقت أول نشر"
description: "الوقت من الانضمام إلى أول نشر إنتاجي"
target: "<أسبوع"
measurement: |
first_deployment_date - employee_start_date
- name: "استخدام توثيق التأهيل"
description: "% من المطورين الجدد الذين أكملوا مستندات التأهيل"
target: ">90%"
productivity:
- name: "وقت البناء"
description: "متوسط مدة خط أنابيب CI"
target: "<10 دقائق"
prometheus: |
avg(ci_pipeline_duration_seconds{status="success"}) / 60
- name: "وقت النشر"
description: "الوقت من الدمج إلى الإنتاج"
target: "<30 دقيقة"
- name: "وقت تشغيل البيئة"
description: "الوقت لإنشاء بيئة تطوير جديدة"
target: "<15 دقيقة"
friction:
- name: "معدل تذاكر الدعم"
description: "تذاكر المنصة لكل مطور شهريًا"
target: "<0.5"
prometheus: |
count(tickets{category="platform"}) /
count(active_developers)
- name: "تبني الخدمة الذاتية"
description: "% من المهام المكتملة بدون تذاكر"
target: ">85%"
- name: "وقت البحث إلى الإجابة في التوثيق"
description: "الوقت لإيجاد إجابة في TechDocs"
target: "<5 دقائق"
قياس تبني المنصة
تتبع كيف يستخدم المطورون منصتك:
# مقاييس تبني المنصة
adoption_metrics:
backstage_usage:
- name: "المستخدمين النشطين يوميًا"
prometheus: |
count(distinct(
backstage_request_user
) by (user) [24h])
- name: "استخدام القوالب أسبوعيًا"
prometheus: |
sum(increase(
backstage_scaffolder_task_count_total{status="completed"}
[7d]))
- name: "تغطية الكتالوج"
description: "% من الخدمات المسجلة في الكتالوج"
prometheus: |
count(backstage_catalog_entities{kind="Component"}) /
count(kubernetes_services)
crossplane_usage:
- name: "طلبات البنية التحتية ذاتية الخدمة"
prometheus: |
sum(increase(crossplane_claim_created_total[30d]))
- name: "أكثر أنواع الموارد طلبًا"
prometheus: |
topk(5, sum by (kind) (crossplane_claim_created_total))
argocd_usage:
- name: "التطبيقات المُدارة بـ GitOps"
prometheus: |
count(argocd_app_info)
- name: "المزامنة اليدوية مقابل الآلية"
prometheus: |
sum(argocd_app_sync_total{trigger="automated"}) /
sum(argocd_app_sync_total)
استطلاعات المطورين
استكمال المقاييس الكمية بالتغذية الراجعة النوعية:
# أسئلة استطلاع المطورين
survey:
satisfaction:
- question: "ما مدى رضاك عن المنصة؟ (1-10)"
type: "scale"
benchmark: ">7"
- question: "هل توصي بالمنصة لزميل؟"
type: "nps"
benchmark: "NPS > 30"
productivity:
- question: "المنصة تساعدني على أن أكون أكثر إنتاجية"
type: "likert"
options: ["لا أوافق بشدة", "لا أوافق", "محايد", "أوافق", "أوافق بشدة"]
- question: "يمكنني نشر الكود دون انتظار المساعدة"
type: "likert"
friction_points:
- question: "ما أكبر عائق في سير عملك؟"
type: "open_text"
- question: "أي ميزة منصة تريد تحسينها أكثر؟"
type: "multiple_choice"
options:
- "التوثيق"
- "سرعة النشر"
- "خيارات الخدمة الذاتية"
- "المراقبة"
- "أخرى"
frequency: "ربع سنوي"
anonymous: true
لوحة إنتاجية المطور
# grafana-dashboard-devex.yaml
dashboard:
title: "لوحة تجربة المطور"
rows:
- title: "إنتاجية المطور"
panels:
- title: "متوسط وقت البناء (دقائق)"
type: "stat"
query: "avg(ci_build_duration_seconds) / 60"
thresholds:
- color: "green"
value: 0
- color: "yellow"
value: 10
- color: "red"
value: 20
- title: "النشر لكل مطور (يوميًا)"
type: "stat"
query: |
sum(increase(deployments_total[24h])) /
count(distinct(developer))
- title: "تبني المنصة"
panels:
- title: "مستخدمي Backstage اليوميين"
type: "graph"
query: "backstage_daily_active_users"
- title: "الخدمة الذاتية مقابل التذاكر"
type: "piechart"
queries:
- expr: "sum(self_service_requests)"
legend: "الخدمة الذاتية"
- expr: "sum(ticket_requests)"
legend: "التذاكر"
- title: "التأهيل"
panels:
- title: "وقت أول نشر (أيام)"
type: "stat"
query: "avg(time_to_first_deploy_days)"
- title: "نشر المطورين الجدد (30 يوم)"
type: "table"
query: |
topk(10,
count by (developer) (
deployments_total{developer_tenure_days < 30}
)
)
تتبع التحسن عبر الوقت
# تتبع تحسين DevEx
improvement_tracking:
baseline:
date: "2025-Q1"
metrics:
time_to_first_deploy: "5 أيام"
build_time_avg: "15 دقيقة"
self_service_rate: "60%"
developer_satisfaction: "6.5/10"
current:
date: "2025-Q4"
metrics:
time_to_first_deploy: "يومان"
build_time_avg: "8 دقائق"
self_service_rate: "85%"
developer_satisfaction: "8.2/10"
goals:
date: "2026-Q2"
metrics:
time_to_first_deploy: "يوم"
build_time_avg: "5 دقائق"
self_service_rate: "95%"
developer_satisfaction: "9.0/10"
إطار SPACE
تطبيق إطار SPACE لقياس DevEx الشامل:
# إطار SPACE
space:
satisfaction:
description: "كيف يشعر المطورون بشأن عملهم"
metrics:
- "درجة رضا المطور"
- "صافي نقاط الترويج (NPS)"
- "سيوصي بالمنصة"
performance:
description: "نتائج أنشطة المطور"
metrics:
- "إنتاجية مراجعة الكود"
- "نقاط القصة المكتملة"
- "مقاييس تأثير العميل"
activity:
description: "عدد إجراءات المطور"
metrics:
- "عدد الالتزامات"
- "PRs مفتوحة/مدمجة"
- "النشر يوميًا"
communication:
description: "كيف يتعاون المطورون"
metrics:
- "وقت استجابة مراجعة PR"
- "مساهمات التوثيق"
- "جلسات مشاركة المعرفة"
efficiency:
description: "الحد الأدنى من الهدر في سير العمل"
metrics:
- "وقت البناء"
- "وقت انتظار المراجعات"
- "حمل الاجتماعات"
في الدرس التالي، سنستكشف إدارة التكاليف وممارسات FinOps لفرق المنصة. :::