العودة للدورة|مقابلات مدير الهندسة: القيادة وتصميم المؤسسات والتنفيذ الاستراتيجي
معمل

بناء نظام مراجعة أداء فريق هندسي

30 دقيقة
متوسط
3 المحاولات المجانية

التعليمات

نظرة عامة

في هذا المعمل، ستبني نظام مراجعة أداء بلغة Python يمكن لمدير الهندسة استخدامه لتتبع أداء الفريق خلال ربع سنوي. سيدير النظام أعضاء الفريق وأهدافهم ويحسب معدلات الإنجاز ويحدد ذوي الأداء المنخفض الذين يحتاجون توجيهاً ويولّد ملخصات مراجعة منسقة.

المفاهيم الأساسية

يطبق هذا المعمل أطر إدارة الأداء من الوحدة 2:

  • تتبع الأهداف بأسلوب OKR مع نسب إنجاز قابلة للقياس
  • تحديد ذوي الأداء المنخفض باستخدام عتبات قابلة للتعديل
  • ملخصات مراجعة جاهزة لنموذج SBI مع تقييمات محددة قائمة على الأدلة
  • مخرجات صديقة للمعايرة تمكّن المقارنة بين الفرق

المتطلبات

الجزء 1: إدارة أعضاء الفريق

أنشئ دالة add_team_member(team, name, role, level) تقوم بـ:

  • قبول قاموس الفريق واسم العضو (نص) والدور (نص) والمستوى (نص، مثل "L3"، "L4"، "L5")
  • إضافة العضو إلى الفريق بقائمة أهداف فارغة وحالة افتراضية "on_track"
  • إرجاع قاموس الفريق المحدّث
  • رفع ValueError إذا كان اسم العضو موجوداً بالفعل في الفريق

أنشئ دالة remove_team_member(team, name) تقوم بـ:

  • إزالة عضو من قاموس الفريق
  • إرجاع قاموس الفريق المحدّث
  • رفع KeyError إذا كان العضو غير موجود

الجزء 2: إدارة الأهداف

أنشئ دالة add_goal(team, member_name, goal_title, weight) تقوم بـ:

  • إضافة هدف إلى قائمة أهداف العضو المحدد
  • كل هدف يحتوي على: title (نص)، weight (عدد عشري، 0.0 إلى 1.0)، completion (عدد عشري، الافتراضي 0.0)
  • التحقق من أن مجموع الأوزان للعضو لا يتجاوز 1.0
  • رفع ValueError إذا كان العضو غير موجود أو إذا كانت إضافة الهدف ستتجاوز مجموع الوزن 1.0

أنشئ دالة update_goal_completion(team, member_name, goal_title, completion) تقوم بـ:

  • تحديث نسبة الإنجاز (0.0 إلى 1.0) لهدف محدد
  • رفع ValueError إذا لم تكن نسبة الإنجاز بين 0.0 و1.0
  • رفع KeyError إذا كان العضو أو الهدف غير موجود

الجزء 3: حسابات الأداء

أنشئ دالة calculate_member_score(team, member_name) تقوم بـ:

  • حساب درجة أداء موزونة: مجموع (وزن_الهدف * إنجاز_الهدف) لجميع الأهداف
  • إرجاع عدد عشري مُقرَّب لرقمين عشريين
  • رفع KeyError إذا كان العضو غير موجود

أنشئ دالة identify_underperformers(team, threshold=0.6) تقوم بـ:

  • إرجاع قائمة من القواميس للأعضاء الذين درجتهم الموزونة أقل من العتبة
  • كل قاموس يحتوي على: name، score، role، level، وstruggling_goals (قائمة عناوين الأهداف ذات الإنجاز أقل من 0.5)
  • القائمة مرتبة حسب الدرجة تصاعدياً (الأداء الأقل أولاً)

أنشئ دالة calculate_team_stats(team) تقوم بـ:

  • إرجاع قاموس يحتوي على:
    • team_size: العدد الإجمالي للأعضاء
    • average_score: متوسط الدرجة الموزونة عبر جميع الأعضاء (مُقرَّب لرقمين عشريين)
    • highest_performer: قاموس يحتوي على name وscore لأفضل أداء
    • lowest_performer: قاموس يحتوي على name وscore لأقل أداء
    • on_track_count: عدد الأعضاء بدرجة >= 0.7
    • at_risk_count: عدد الأعضاء بدرجة بين 0.4 و0.7
    • underperforming_count: عدد الأعضاء بدرجة < 0.4

الجزء 4: توليد ملخص المراجعة

أنشئ دالة generate_review_summary(team) تقوم بـ:

  • إرجاع نص منسق يحتوي على:
    • عنوان مع إحصائيات الفريق
    • قسم لكل عضو فريق يعرض:
      • الاسم والدور والمستوى
      • كل هدف مع وزنه ونسبة إنجازه وشريط تقدم مرئي باستخدام أحرف كتل
      • الدرجة الموزونة الإجمالية
      • تصنيف الحالة: "Exceeding" (>= 0.9)، "On Track" (>= 0.7)، "Needs Attention" (>= 0.4)، أو "Underperforming" (< 0.4)
    • قسم ملخص يسرد ذوي الأداء المنخفض مع إجراءات موصى بها
  • يجب أن يكون الإخراج نظيفاً ومقروءاً ومنظماً بشكل جيد

مثال على الاستخدام

team = {}

# إضافة أعضاء
team = add_team_member(team, "Alice Chen", "Senior Engineer", "L5")
team = add_team_member(team, "Bob Kumar", "Engineer", "L4")
team = add_team_member(team, "Carol Davis", "Junior Engineer", "L3")

# إضافة أهداف لـ Alice
team = add_goal(team, "Alice Chen", "Lead API redesign", 0.4)
team = add_goal(team, "Alice Chen", "Mentor 2 junior engineers", 0.3)
team = add_goal(team, "Alice Chen", "Reduce P1 incidents by 50%", 0.3)

# تحديث نسب الإنجاز
team = update_goal_completion(team, "Alice Chen", "Lead API redesign", 0.9)
team = update_goal_completion(team, "Alice Chen", "Mentor 2 junior engineers", 0.8)
team = update_goal_completion(team, "Alice Chen", "Reduce P1 incidents by 50%", 0.7)

# حساب الدرجات
score = calculate_member_score(team, "Alice Chen")
print(f"درجة Alice: {score}")  # 0.81

# توليد المراجعة الكاملة
summary = generate_review_summary(team)
print(summary)

تنسيق الإخراج المتوقع

================================================
ENGINEERING TEAM PERFORMANCE REVIEW
================================================

Team Size: 3
Average Score: 0.64
On Track: 1 | At Risk: 1 | Underperforming: 1

------------------------------------------------
Alice Chen | Senior Engineer | L5
------------------------------------------------
  Lead API redesign        (40%) [==========-] 90%
  Mentor 2 junior engineers (30%) [========--] 80%
  Reduce P1 incidents by 50% (30%) [=======---] 70%

  Weighted Score: 0.81 — STATUS: On Track

------------------------------------------------
Bob Kumar | Engineer | L4
------------------------------------------------
  Deliver auth service      (50%) [======----] 60%
  Write tech spec for caching (30%) [=====-----] 50%
  Improve test coverage     (20%) [====------] 40%

  Weighted Score: 0.53 — STATUS: Needs Attention

------------------------------------------------
Carol Davis | Junior Engineer | L3
------------------------------------------------
  Complete onboarding tasks (40%) [========--] 80%
  Fix 10 bugs from backlog  (30%) [===-------] 30%
  Shadow on-call rotation   (30%) [==--------] 20%

  Weighted Score: 0.47 — STATUS: Needs Attention

================================================
UNDERPERFORMERS REQUIRING ACTION
================================================

1. Carol Davis (L3) — Score: 0.47
   Struggling goals: Fix 10 bugs from backlog, Shadow on-call rotation
   Recommended: Create a 30-60-90 day coaching plan

================================================

معايير التقييم

إدارة أعضاء الفريق والأهداف — add_team_member() تضيف الأعضاء بشكل صحيح مع الدور والمستوى وأهداف فارغة وحالة افتراضية؛ ترفع ValueError للأسماء المكررة؛ remove_team_member() تزيل الأعضاء وترفع KeyError للأعضاء غير الموجودين؛ add_goal() تتحقق من حدود الأوزان (المجموع <= 1.0) وترفع ValueError عند تجاوزها؛ update_goal_completion() تتحقق من نطاق 0.0-1.0 وترفع الأخطاء المناسبة للأعضاء أو الأهداف غير الموجودة25 نقاط
حساب الدرجة الموزونة — calculate_member_score() تحسب بشكل صحيح مجموع (الوزن * الإنجاز) لجميع الأهداف وتُرجع عدداً عشرياً مُقرَّباً لرقمين عشريين؛ تتعامل مع الحالات الحدية مثل الأعضاء بدون أهداف (تُرجع 0.0) والأعضاء بجميع الأهداف بنسبة إنجاز 100% (تُرجع مجموع الأوزان)25 نقاط
تحديد ذوي الأداء المنخفض وإحصائيات الفريق — identify_underperformers() تُرجع قائمة مرتبة بشكل صحيح (تصاعدياً حسب الدرجة) مع الأهداف المتعثرة (الإنجاز < 0.5) لكل ذي أداء منخفض؛ calculate_team_stats() تنتج أعداداً دقيقة لفئات على المسار (>= 0.7) ومعرض للخطر (0.4 إلى 0.7) وأداء منخفض (< 0.4)، وتحدد بشكل صحيح أعلى وأقل أداء25 نقاط
جودة مخرجات ملخص المراجعة — generate_review_summary() تنتج تقريراً نظيفاً ومنسقاً بشكل جيد يتضمن عنوان إحصائيات الفريق وأقسام الأعضاء الفردية مع أشرطة تقدم الأهداف والدرجات الموزونة مع تصنيفات الحالة (متفوق/على المسار/يحتاج اهتمام/أداء منخفض) وقسم ذوي الأداء المنخفض مع إجراءات قابلة للتنفيذ؛ تتعامل مع الحالات الحدية مثل الفرق الفارغة والأعضاء بدون أهداف بدون أعطال25 نقاط

قائمة التحقق

0/10

حلك

3 محاولات مجانية متبقية
نشرة أسبوعية مجانية

ابقَ على مسار النيرد

بريد واحد أسبوعياً — دورات، مقالات معمّقة، أدوات، وتجارب ذكاء اصطناعي.

بدون إزعاج. إلغاء الاشتراك في أي وقت.